s9tpepper / karma-cucumberjs Goto Github PK
View Code? Open in Web Editor NEWA Cucumber.js Karma test runner adapter.
License: MIT License
A Cucumber.js Karma test runner adapter.
License: MIT License
Can you please update documentation regarding how to run example, opening runner in browser doesn't do anything
When running my tests, they fairly regularly fail with the following message: TypeError: 'undefined' is not a function (evaluating 'window.__karma__.loaded()')
. Rerunning the tests solves the problem, but the instability is frustrating when developing locally and unacceptable when it randomly fails on the ci-server (travis-ci).
Is it possible that I have configured something incorrectly?
I'm executing the tests with grunt and the project is available here, if that would help diagnose.
Hi,
It's seems that not much has changed in this project in three years. If this project is no longer maintained please put some description in the README and we will find a different project to make the official cucumber-karma project.
Thanks.
I unregistered karma-cucumber on npm since this project is more up to date, and redirected traffic from here to this repo.
So if you would like you can take that name (as soon as the registry updates).
I'm getting this error when running:
Chrome 52.0.2743 (Mac OS X 10.11.4) ERROR
Uncaught ReferenceError: angular is not defined
at /Users/jim/Git-Projects/Flexbox-Push-Drawer-Example/src/app/index.module.js:4
My karma.config file:
// Karma configuration
// Generated on Mon Aug 08 2016 16:30:26 GMT-0300 (BRT)
//npm install -g grunt-cli bower yo generator-karma generator-angular
//npm install -g karma-phantomjs-launcher karma
//npm install -g karma-phantomjs-launcher karma cucumber
//npm install karma-cucumberjs --save-dev
module.exports = function(config) {
config.set({
// base path that will be used to resolve all patterns (eg. files, exclude)
basePath: '',
// frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['cucumberjs'],
// list of files / patterns to load in the browser
files: [
'src/app/**/*.module.js',
{pattern: 'ff/**/*.feature', watched: true, included: false, served: true},
// {pattern: 'ff/**/*.js', watched: true, included: true, served: true},
{pattern: 'src/**/*.js', watched: true, included: true, served: true}
],
// list of files to exclude
exclude: [
],
// preprocess matching files before serving them to the browser
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
preprocessors: {
},
// test results reporter to use
// possible values: 'dots', 'progress'
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['progress'],
// web server port
port: 9876,
// enable / disable colors in the output (reporters and logs)
colors: true,
// level of logging
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_DEBUG,
// enable / disable watching file and executing tests whenever any file changes
autoWatch: true,
// start these browsers
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
browsers: ['Chrome'],
//browsers: ['PhantomJS'],
// Continuous Integration mode
// if true, Karma captures browsers, runs the tests and exits
singleRun: false,
// Concurrency level
// how many browser should be started simultaneous
concurrency: Infinity
})
}
ff/ff.feature:
Feature: Adding
Scenario: Add two numbers
Given the input "2+2"
When the calculator is run
Then the output should be "4"
ff/ff.steps.js:
//var zombie = require('zombie');
addStepDefinitions(function (scenario) {
//module.exports = function () {
scenario.Given(/^the input "([^"]*)"$/, function (arg1, callback) {
// Write code here that turns the phrase above into concrete actions
callback(null, 'pending');
});
scenario.When(/^the calculator is run$/, function (callback) {
// Write code here that turns the phrase above into concrete actions
callback(null, 'pending');
});
//this.Then(/^the output should be "([^"]*)"$/, function (arg1, callback) {
// Write code here that turns the phrase above into concrete actions
// callback(null, 'pending');
//});
});
If I use Ember.js with karma-cucumber.js I have some problems:
Uncaught Error. No function (idx) {
return this.objectAt(idx);
} function exists on {}
at karma-cucumberjs/lib/adapter.js:20
my karma task and conf: https://gist.github.com/OpakAlex/8283270
I need your help!
Thanks!
it may just be my project but..
when i configure coverage, the instanbul report is generated though none of the files i specify to cover are reported on.
i've test this with some jasmine specs rathern the cucumber.js specs and the jasmine one generate coverage information.
This is a real shame as the coverage information would be the icing on the cake for me
Hi,
Please help me, how can I setup and use browser handles in this plugin (ex: zombie)
Thanks,
https://github.com/cucumber/cucumber-js supports feature files in non-English language, but https://github.com/s9tpepper/karma-cucumberjs does not.
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();
});
});
As a karma-cucumber-js user
I want to include a bundle built with Browserify
So that I can use its functionality inside my feature testing DSL
Given a bundle that has been built with Browserify as follows browserify src/some-module.js --standalone some-module > bundle.js
When I include this module in karma.conf.js
's file section as follows { pattern: "./node_modules/some-module/bundle.js", watched: false, included: true, served: false }
I should not be presented with the error Error: Mismatched anonymous define() module
The error originates from here https://github.com/s9tpepper/karma-cucumberjs/blob/master/lib/adapter.js#L1220
For me, karma was already set up in my project and is run with gulp scripts . I'm pretty sure those gulp scripts won't work to run this karma config file. It would be nice for the README to show how to actually run this instead of just leaving you wondering...
could you update to the latest version of cucumber and include scenario outlines and examples.
thanks
Does karma-cucumberjs not support synchronous step definitions like cucumber-js does?
https://github.com/cucumber/cucumber-js#synchronous-step-definitions
I never get to when in the below example:
PhantomJS 1.9.8 (Mac OS X 0.0.0) LOG: 'Given'
WARN [PhantomJS 1.9.8 (Mac OS X 0.0.0)]: Disconnected (1 times), because no message in 10000 ms.
Feature:
Feature text
More feature text
Scenario: Scenario text
Given a
When b
Then c
scenario.Given(/^a$/, function () {
console.log('Given');
console.log('leaving Given');
});
scenario.When(/^b$/, function () {
console.log('When');
console.log('leaving When');
});
I'm trying to work with cucumber in karma using grunt-karma and karma-cucumberjs. I'm doing everything as Readme.md describes, just translating the configs to grunt-karma.
When I run grunt karma:bdd I get the colourful error:
PhantomJS 1.9.8 (Linux 0.0.0)
Error: Mismatched anonymous define() module: function () {
return sinonChai;
}
http://requirejs.org/docs/errors.html#mismatch
at http://localhost:9876/base/node_modules/karma-cucumberjs/lib/adapter.js?8617a1aab4937295762f75412f3a2edb8fddee32:25
Could anyone shed light on the error?
BTW: the RequireJS does not like something. However, nothing is said in Readme.md on RequireJS.
In a grunt task I have:
bdd: {
options: {
files: [{
pattern: 'node_modules/karma-cucumberjs/vendor/cucumber-html.css',
watched: false,
included: false,
served: true
}, {
pattern: 'frontend/features/step_definitions/support/app.template',
watched: false,
included: false,
served: true
}, {
pattern: 'frontend/features/**/*.feature',
watched: true,
included: false,
served: true
}, {
pattern: 'frontend/features/step_definitions/**/*.js',
watched: true,
included: true,
served: true
}],
frameworks: ['cucumberjs', 'chai-as-promised', 'sinon-chai', 'chai']
}
app.template:
<div id="myApp">
<div class="a-container">
</div>
</div>
<script type="text/javascript">
startCucumberRun();
</script>
step definition:
addStepDefinitions( function (scenario) {
var When = scenario.When;
var Then = scenario.Then;
// skipped...
});
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.