Skip to content

Commit

Permalink
feat: add grep option like in karma-mocha
Browse files Browse the repository at this point in the history
  • Loading branch information
maksimr committed Jan 18, 2015
1 parent 6d5455e commit 4213b18
Show file tree
Hide file tree
Showing 4 changed files with 138 additions and 1 deletion.
21 changes: 21 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,27 @@ module.exports = function(config) {
};
```

If you want run only some tests matching a given pattern you can do this in the following way

```bash
karma start &
karma run -- --grep=<pattern>
```

or

```js
module.exports = function(config) {
config.set({
...
client: {
args: ['--grep', '<pattern>'],
...
}
});
};
```

----

For more information on Karma see the [homepage].
Expand Down
61 changes: 61 additions & 0 deletions src/adapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,67 @@ function KarmaReporter(tc, jasmineEnv) {
};
}

/**
* Extract grep option from karma config
* @param {[Array|string]} clientArguments The karma client arguments
* @return {string} The value of grep option by default empty string
*/
var getGrepOption = function(clientArguments) {
var clientArgString = clientArguments || '';

if (Object.prototype.toString.call(clientArguments) === '[object Array]') {
clientArgString = clientArguments.join('=');
}

var match = /--grep=(.*)/.exec(clientArgString);
return match ? match[1] : '';
};

/**
* Extract grep option from karma config
* @param {[Array|string]} clientArguments The karma client arguments
* @return {string} The value of grep option by default empty string
*/
var getGrepOption = function(clientArguments) {
var clientArgString = clientArguments || '';

if (Object.prototype.toString.call(clientArguments) === '[object Array]') {
clientArgString = clientArguments.join('=');
}

var match = /--grep=(.*)/.exec(clientArgString);
return match ? match[1] : '';
};

/**
* Create jasmine spec filter
* @param {Object} options Spec filter options
*/
var KarmaSpecFilter = function(options) {
var filterString = options && options.filterString() && options.filterString().replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
var filterPattern = new RegExp(filterString);

this.matches = function(specName) {
return filterPattern.test(specName);
};
};

/**
* @param {Object} config The karma config
* @param {Object} jasmineEnv jasmine environment object
*/
var createSpecFilter = function(config, jasmineEnv) {
var specFilter = new KarmaSpecFilter({
filterString: function() {
return getGrepOption(config.args);
}
});

jasmineEnv.specFilter = function(spec) {
return specFilter.matches(spec.getFullName());
};
};

/**
* Karma starter function factory.
*
Expand Down
1 change: 1 addition & 0 deletions src/adapter.wrapper
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
%CONTENT%


createSpecFilter(window.__karma__.config, jasmine.getEnv());
window.__karma__.start = createStartFn(window.__karma__);

})(window);
56 changes: 55 additions & 1 deletion test/adapter.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
Tests for adapter/jasmine.js
These tests are executed in browser.
*/
/*global getJasmineRequireObj,jasmineRequire,MockSocket,KarmaReporter*/
/*global formatFailedStep,indexOf,createStartFn,getGrepOption,KarmaSpecFilter,createSpecFilter*/

/* jshint globalstrict: true */
'use strict';
Expand Down Expand Up @@ -158,7 +160,7 @@ describe('jasmine adapter', function(){
var counter = 3;

spyOn(Date.prototype, 'getTime').andCallFake(function(){
return counter++;
return counter+=1;
});

karma.result.andCallFake(function(result){
Expand Down Expand Up @@ -259,4 +261,56 @@ describe('jasmine adapter', function(){
});


describe('getGrepOption', function() {
it('should get grep option from config if args is array', function() {
expect(getGrepOption(['--grep', 'test'])).toEqual('test');
});

it('should return empty string if args does not contain grep option', function() {
expect(getGrepOption([])).toEqual('');
});

it('should get grep option from args if args is string', function() {
expect(getGrepOption('--grep=test')).toEqual('test');
});
});


describe('KarmaSpecFilter', function() {
var specFilter;

beforeEach(function() {
specFilter = new KarmaSpecFilter({
filterString: function() {
return 'test';
}
});
});

it('should create spec filter', function() {
expect(specFilter).toBeDefined();
});

it('should filter spec by name', function() {
expect(specFilter.matches('bar')).toEqual(false);
expect(specFilter.matches('test')).toEqual(true);
});
});


describe('createSpecFilter', function() {
it('should create spec filter in jasmine', function() {
var jasmineEnvMock = {};
var karmaConfMock = {
args: ['--grep', 'test']
};
var specMock = {
getFullName: jasmine.createSpy('getFullName').andReturn('test')
};

createSpecFilter(karmaConfMock, jasmineEnvMock);

expect(jasmineEnvMock.specFilter(specMock)).toEqual(true);
});
});
});

0 comments on commit 4213b18

Please sign in to comment.