s9tpepper / karma-cucumberjs

A Cucumber.js Karma test runner adapter.
MIT License
54 stars 21 forks source link

You need to include some adapter that implements __karma__.start method! #23

Open JimLynchCodes opened 7 years ago

JimLynchCodes commented 7 years ago

I'm getting this error when executing and have no idea why...

'use strict';

var path = require('path');
var conf = require('./gulp/conf');

var _ = require('lodash');
var wiredep = require('wiredep');

var pathSrcHtml = [
  path.join(conf.paths.src, '/**/*.html')
];

function listFiles() {
  var wiredepOptions = _.extend({}, conf.wiredep, {
    dependencies: true,
    devDependencies: true
  });

  var patterns = wiredep(wiredepOptions).js
    .concat([
      path.join(conf.paths.src, '/app/**/*.module.js'),
      path.join(conf.paths.src, '/app/**/*.js'),
      path.join(conf.paths.src, '/**/*.spec.js'),
      path.join(conf.paths.src, '/**/*.mock.js'),
    ])
    .concat(pathSrcHtml);

  var files = patterns.map(function(pattern) {
    return {
      pattern: pattern
    };
  });
  files.push({
    pattern: path.join(conf.paths.src, '/assets/**/*'),
    included: false,
    served: true,
    watched: false
  });
  return files;
}

module.exports = function(config) {

  var configuration = {
      files: [
        // These are not watched because they're not expected to change.
        // These are not included because they are not JavaScript files and Karma inserts
        // these as <script> tags.
        // These are served however, as the adapter will load them into the captured browsers.
        // The cucumber-html.css file can be copied and customized, simply change the path.
        // The adapter will load any file ending with '.css' into the captured browsers.
        {pattern: 'node_modules/karma-cucumberjs/vendor/cucumber-html.css', watched: false,
          included: false, served: true},
        {pattern: '/app.unit.template.html', watched: false, included: false, served: true},

        // These are not included because they're text feature files and shouldn't go in script tags.
        // These are watched because feature files will change during dev and you want Karma to run
        // tests when these change.
        // These are served by Karma so the adapter can load their contents when its time to test.
        {pattern: '/**/*.unit.feature', watched: true, included: false, served: true},

        // The step definitions should be loaded last so the adapter can load the global functions
        // needed by the step defs.
        // The step defs are watched and served so Karma runs when they change.
        {pattern: '/**/*.unit.step.js', watched: true, included: true, served: true}
      ],

    // frameworks: ['jasmine', 'angular-filesort','karma-cucumberjs'],
    framework: ['cucumberjs'],

    singleRun: true,

    autoWatch: false,

    ngHtml2JsPreprocessor: {
      stripPrefix: conf.paths.src + '/',
      moduleName: 'ngNjOrg'
    },

    logLevel: 'WARN',

    // frameworks: ['jasmine', 'angular-filesort'],
    // frameworks: ['cucumberjs', 'angular-filesort'],

    angularFilesort: {
      whitelist: [path.join(conf.paths.src, '/**/!(*.html|*.spec|*.mock).js')]
    },

    browsers : ['PhantomJS'],

    plugins : [
      'karma-phantomjs-launcher',
      'karma-angular-filesort',
      'karma-coverage',
      'karma-jasmine',
      'karma-ng-html2js-preprocessor'
    ],

    coverageReporter: {
      type : 'html',
      dir : 'dist/reports/acceptance-unit'
    },

    reporters: ['progress'],

    proxies: {
      '/assets/': path.join('/base/', conf.paths.src, '/assets/')
    }
  };

  // This is the default preprocessors configuration for a usage with Karma cli
  // The coverage preprocessor is added in gulp/unit-test.js only for single tests
  // It was not possible to do it there because karma doesn't let us now if we are
  // running a single test or not
  configuration.preprocessors = {};
  pathSrcHtml.forEach(function(path) {
    configuration.preprocessors[path] = ['ng-html2js'];
  });

  // This block is needed to execute Chrome on Travis
  // If you ever plan to use Chrome and Travis, you can keep it
  // If not, you can safely remove it
  // https://github.com/karma-runner/karma/issues/1144#issuecomment-53633076
  if(configuration.browsers[0] === 'Chrome' && process.env.TRAVIS) {
    configuration.customLaunchers = {
      'chrome-travis-ci': {
        base: 'Chrome',
        flags: ['--no-sandbox']
      }
    };
    configuration.browsers = ['chrome-travis-ci'];
  }

  config.set(configuration);
};
<div id='myApp'>
  <div class='box' style='background-color: green;'>A box in my app</div>
</div>

<script type='text/javascript'>
  $('.box').click(function () {
    $('.box').css('background-color', 'red');
  });

  // This MUST be called once the application is ready to undergo testing.
  startCucumberRun();
</script>

Feature: The Footer has some hardcoded text.
  In order to see copyright information and terms of user links
  As a user of the website
  I want to have to see copyright information and terms of user links displayed on the screen.

  - Johnny Bibblestein from the Texas Ranger Motorcycle Squad
  alerted me that the footer is quite an important piece of the project
  and surely requires low level step definition acceptance tests!

  Scenario: Copyright text shows
    Given gg
    When mm
    Then pp
// This addStepDefinitions() function is why the step definitions must
// be configured to load after the adapter.
addStepDefinitions(function (scenario) {
  // Provide a custom World constructor. It's optional, a default one is supplied.
  scenario.World = function (callback) {
    callback();
  };

  // Define your World, here is where you can add some custom utlity functions you
  // want to use with your Cucumber step definitions, this is usually moved out
  // to its own file that you include in your Karma config
  var proto = scenario.World.prototype;
  proto.appSpecificUtilityFunction = function someHelperFunc() {
    // do some common stuff with your app
  };

  // Before scenario hoooks
  scenario.Before(function (callback) {
    // Use a custom utility function
    this.appSpecificUtilityFunction();

    callback();
  });

  scenario.Given(/^gg$/, function(callback) {
    // Verify or set up an app state

    // Move to next step
    callback();
  });

  scenario.When(/^mm$/, function(callback) {
    // Trigger some user action

    // Move to next step
    callback();
  });

  scenario.Then(/^pp$/, function(callback) {
    // Verify the expected outcome

    // Move to next step
    callback();
  });

  // After scenario hooks
  scenario.After(function (callback) {
    callback();
  });
});