Skip to content

Commit c9fe020

Browse files
committed
feat(testing): add karma / jasmine testing support
- add dependencies - add karma.conf.js with webpack support - add webpack karma context for loading of angular mocks and tests - add example karma test (todo-service.spec.js)
1 parent 77bfe2f commit c9fe020

File tree

4 files changed

+104
-2
lines changed

4 files changed

+104
-2
lines changed

karma.conf.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
var webpack = require('webpack');
2+
3+
module.exports = function(config) {
4+
config.set({
5+
browsers: ['Chrome'],
6+
frameworks: ['jasmine'],
7+
reporters: ['mocha'],
8+
9+
logLevel: config.LOG_INFO,
10+
autoWatch: true,
11+
singleRun: false,
12+
colors: true,
13+
port: 9876,
14+
15+
basePath: '',
16+
files: ['webpack.karma.context.js'],
17+
preprocessors: { 'webpack.karma.context.js': ['webpack'] },
18+
exclude: [],
19+
webpack: {
20+
devtool: 'eval',
21+
module: {
22+
loaders: [
23+
{test: /\.js$/, loader: 'babel?optional[]=runtime&stage=1', exclude: /(\.test.js$|node_modules)/},
24+
{test: /\.css$/, loader: 'style!css'},
25+
{test: /\.tpl.html/, loader: 'html'},
26+
{test: /\.(png|jpg|gif|svg|eot|ttf|woff|woff2)$/, loader: 'url?limit=50000'}
27+
]
28+
},
29+
plugins: [
30+
new webpack.ProvidePlugin({
31+
$: 'jquery',
32+
jQuery: 'jquery'
33+
})
34+
]
35+
}
36+
});
37+
};

package.json

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77
"start": "webpack-dev-server --TARGET=DEV",
88
"build": "webpack --display-chunks --display-reasons --display-error-details --display-modules",
99
"dist": "webpack --TARGET=DIST",
10-
"test": "mocha --compilers js:mocha-babel ./src/**/*.test.js",
1110
"server_build": "node server.js",
12-
"server_dist": "node server.js --TARGET=DIST"
11+
"server_dist": "node server.js --TARGET=DIST",
12+
"test": "mocha --compilers js:mocha-babel ./src/**/*.test.js",
13+
"karma": "karma start"
1314
},
1415
"author": "tomas.trajan@gmail.com",
1516
"license": "ISC",
@@ -27,6 +28,7 @@
2728
"lodash": "^3.10.1"
2829
},
2930
"devDependencies": {
31+
"angular-mocks": "^1.4.7",
3032
"awesome-typescript-loader": "^0.11.3",
3133
"babel": "^5.8.21",
3234
"babel-loader": "^5.3.2",
@@ -38,6 +40,12 @@
3840
"file-loader": "^0.8.4",
3941
"html-loader": "^0.3.0",
4042
"html-webpack-plugin": "^1.6.1",
43+
"jasmine-core": "^2.3.4",
44+
"karma": "^0.13.10",
45+
"karma-chrome-launcher": "^0.2.0",
46+
"karma-jasmine": "^0.3.6",
47+
"karma-mocha-reporter": "^1.1.1",
48+
"karma-webpack": "^1.7.0",
4149
"minimist": "^1.1.3",
4250
"mocha": "^2.2.5",
4351
"mocha-babel": "^3.0.0",
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
'use strict';
2+
3+
describe('TodoService', function () {
4+
5+
var service;
6+
7+
beforeEach(angular.mock.module('main'));
8+
9+
beforeEach(angular.mock.module(function ($provide) {
10+
$provide.constant('initialTodos', []);
11+
}));
12+
13+
beforeEach(angular.mock.inject(function (_TodoService_) {
14+
service = _TodoService_;
15+
}));
16+
17+
it('should contain empty todos after initialization', function() {
18+
expect(service.todos.length).toBe(0);
19+
});
20+
21+
it('should add todo', function () {
22+
service.addTodo('Finish example project');
23+
expect(service.todos.length).toBe(1);
24+
expect(service.todos[0].label).toBe('Finish example project');
25+
expect(service.todos[0].done).toBe(false);
26+
});
27+
28+
it('should toggle todo', function () {
29+
service.addTodo('Finish example project');
30+
expect(service.todos[0].done).toBe(false);
31+
32+
service.toggleTodo('Finish example project');
33+
expect(service.todos[0].done).toBe(true);
34+
35+
service.toggleTodo('Finish example project');
36+
expect(service.todos[0].done).toBe(false);
37+
});
38+
39+
it('should remove done todos', function () {
40+
service.addTodo('Todo1');
41+
service.addTodo('Todo2');
42+
service.addTodo('Todo3');
43+
expect(service.todos.length).toBe(3);
44+
45+
service.toggleTodo('Todo1');
46+
service.removeDoneTodos();
47+
expect(service.todos.length).toBe(2);
48+
});
49+
50+
});

webpack.karma.context.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import angular from 'angular';
2+
import mocks from 'angular-mocks';
3+
4+
import main from './src/main';
5+
6+
let context = require.context('./src', true, /\.spec\.js/);
7+
context.keys().forEach(context);

0 commit comments

Comments
 (0)