karma-jasmine-feature

1.1.3 • Public • Published

karma-jasmine-feature

Karma plugin that use gherkin feature files to describe tests with Jasmine

Any feedback is appreciated !

Usage

Install

karma-jasmine-feature is available as an npm module

Install locally with

npm install karma-jasmine-feature --save-dev

Features

The examples are written with Gherkin language : https://github.com/cucumber/cucumber/wiki/Gherkin

Feature: Calculator addition 
	In order to avoid silly mistakes
	As a math idiot
	I want to be told the sum of two numbers

	Scenario: Add two numbers
		Given I have entered 50 into the calculator
		And I have entered 70 into the calculator
		When I press add
		Then the result should be 120 on the screen

	@ignore
	Scenario: Add two other numbers
		Given I have entered 10 into the calculator
		And I have entered 79 into the calculator
		When I press add
		Then the result should be 89 on the screen
		And failed the test

Each Gherkin Feature will become a jasmine describe

And each Scenario will become a it

Some tags will allow you to ignore feature execution : jasmine xdescribe() / xit()

  • @ignore - ignore Feature or Scenario
  • @ignoreOthers - ignore all other feature / scenario exept those with this tag

Javascript Specs

The plugin will look for each features implementations within karma included files and execute matching steps.

The featureSteps() function host a set of steps that will be available for each feature that match the featureSteps regexp

    featureSteps(/Calculator/)
        .given(/I have entered (.*) into the calculator/, function(num){
            // this step is for each feature that contains Calculator in title 
        });
 
    featureSteps('Calculator addition')
        .when('I press add', function(){
            // this one is not shared for "Calculator substraction"
        });

given/when/then step can be string or regular expression that match a step in the feature file.

    featureSteps(/Addition/)
        .given(/I have entered (.*) into the calculator/, function(num){
            this.numbers = this.numbers || [];
            this.numbers.push(parseInt(num));
        })
        .when('I press add', function(){
            this.result = this.numbers.reduce(function(a,b){ return a + b },0);
        })
        .then(/the result should be (.*) on the screen/, function(expectedSum){
            expect(this.result).toBe(parseInt(expectedSum));
        })
        .then('failed the test', function(){
            expect(true).toBe(false);
        });

Each step is executed on an isolated scope (this) which can hold current scenario state. (reset for each scenario)

You can add test initialize and cleanup :

    featureSteps('Addition')
      .before(function () {
            module('calculator'); // angular ng mock
            var scope = null;
            inject(function (_$injector_) {
                scope = _$injector_.get('$rootScope').$new();
            }); 
            this.scope = scope;
        })
        .after(function(){
            ...
        })
    ...

To install :

npm install karma-jasmine-feature --save-dev

Then, reference framework in karma.conf.js (require jasmine framework)

frameworks: ['jasmine', 'jasmine-feature'],

And just include feature files and specs in karma.conf.js

files: [
	...
	'features/**/*.feature'
	...
]

Examples

demo.feature:

Feature: Roman numerals

Background: 
	Given I have a Roman numerals calculator
	
Scenario Outline: The calculator should transform simple roman numeral to number     
    Given I enter '<roman>' in the calculator
     When I convert the roman numeral
     Then the displayed value is '<number>'
	 
    Examples:
	| roman | number |
	|     I |      1 |
	|     V |      5 |
	|     X |     10 |
	|     L |     50 |
	|     C |    100 |
	
Scenario: Should add two complex roman numerals
	Given I enter 'IX' in the calculator
	And I enter 'III' in the calculator
	When I press add
	Then the displayed value is 'XII'

@ignore
Scenario: Should be ignore
	Given A scenario with no js implementation
	When I include this scenario
	Then Nothing happens

demo.feature-specs.js

    (function(){
    'use strict';
        featureSteps(/Roman numerals/)
            .given(/I have a Roman numerals calculator/, function(){
                this.calculator = new Calculator();
            })
            .given(/I enter '(.*)' in the calculator/, function(roman){
                this.calculator.setInput(roman);
            })
            .when(/I convert the roman numeral/, function(){
                this.calculator.convert();
            })
            .when(/I press add/, function(){
                this.calculator.add();
            })
            .then(/the displayed value is '(.*)'/, function(num){
                expect(this.calculator.getDisplayedValue()).toBe(num);
            });
    })();

Release Note

  • 26/08/2015 : First release
    • Karma preprocessor to transform feature file into javascript file
    • Karma framework to execute features
    • exlude tests with @ignore & @ignoreOthers
    • custom api :
      • map feature file "Feature" with featureStep(/* regexp that match Feature title + description */)
      • map steps with given / when / then (/* regexp to catch parameters */)

Package Sidebar

Install

npm i karma-jasmine-feature

Weekly Downloads

1

Version

1.1.3

License

ISC

Last publish

Collaborators

  • gregorylimoratto