Tests work with webpack and a new favicon

This commit is contained in:
2016-02-28 18:34:11 +08:00
parent 844ef71cdb
commit 2a02b4e69f
95 changed files with 1429 additions and 1864 deletions
+52 -48
View File
@@ -1,24 +1,55 @@
module.exports = function (config) {
// http://mike-ward.net/2015/09/07/tips-on-setting-up-karma-testing-with-webpack/
var webpackConfig = require('../webpack.config.js');
webpackConfig.entry = {};
config.set({
webpack: webpackConfig,
webpackMiddleware: {
// noInfo: true,
},
basePath: '../',
// web server port
port: 9876,
// urlRoot: "/",
// level of logging
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_INFO,
// enable / disable watching file and executing tests whenever any file changes
autoWatch: true,
// enable / disable colors in the output (reporters and logs)
colors: true,
// test results reporter to use
// possible values: 'dots', 'progress'
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['progress','html','junit'],
frameworks: ['jasmine'],
browsers: ['Chrome', 'Firefox'],
browsers: [
'Chrome',
// 'Firefox'
],
// Continuous Integration mode
// if true, Karma captures browsers, runs the tests and exits
singleRun: false,
plugins: [
'karma-chrome-launcher',
'karma-firefox-launcher',
'karma-jasmine'
require('karma-sourcemap-loader'),
require("karma-webpack"),
require('karma-jasmine'),
require('karma-ng-html2js-preprocessor'),
require('karma-chrome-launcher'),
require('karma-firefox-launcher'),
],
junitReporter: {
@@ -27,6 +58,9 @@ module.exports = function (config) {
},
preprocessors: {
// './build/clientapp.bundle.js': ['webpack','sourcemap'],
'./src/index.js': ['webpack','sourcemap'],
// './src/js/rules.js': ['webpack','sourcemap'],
"*.html": ["ng-html2js"]
},
@@ -46,60 +80,30 @@ module.exports = function (config) {
'/json/': '/base/json/'
},
// test results reporter to use
// possible values: 'dots', 'progress'
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['progress'],
// list of files / patterns to load in the browser
files: [
// dependencies
'bower_components/jquery/dist/jquery.js',
'bower_components/jquery-ui/jquery-ui.js',
// these are for Module('')
'node_modules/angular/angular.js',
'node_modules/angular-mocks/angular-mocks.js',
'bower_components/bootstrap/dist/js/bootstrap.js',
'bower_components/angular/angular.js',
'bower_components/angular-route/angular-route.js',
'bower_components/angular-resource/angular-resource.js',
'bower_components/angular-animate/angular-animate.js',
'bower_components/angular-mocks/angular-mocks.js',
'bower_components/angular-dragdrop/src/angular-dragdrop.js',
'bower_components/angular-ui-grid/ui-grid.js',
'bower_components/lodash/dist/lodash.js',
'bower_components/chai/chai.js',
'js/external/*.js',
// fixtures
{
pattern: 'index.html',
watched: true,
served: true,
included: false
}, {
pattern: 'json/*.json',
watched: true,
served: true,
included: false
},
{
pattern: 'css/*.css',
watched: true,
served: true,
included: false
},
// chai for rule tests
'node_modules/chai/chai.js',
// files to test
'js/storage.js',
'js/helpers.js',
'js/analytics.js',
'js/gameobjects.js',
'js/rules.js',
'js/detector/detector.js',
'js/ui.js',
'js/game.js',
'js/app.js',
'./src/index.js', // load in webpack entry point
'src/js/rules.js',
'test/unit/**/*.js'
],
// list of files to exclude
exclude: [],
});
};
+4 -4
View File
@@ -33,17 +33,17 @@ describe('cardsForScience controllers', function () {
controller = $controller('CardController',{$scope:$scope});
});
it('should have elements', function () {
expect(controller.elements).toBeDefined();
it('should have cards', function () {
expect(controller.cards).toBeDefined();
});
it('should be visible', function () {
var item = controller.elements[0];
var item = controller.cards[0];
expect(controller.isVisible(item)).toBeDefined();
});
it('should be isAvailable', function () {
var item = controller.elements[0];
var item = controller.cards[0];
expect(controller.isAvailable(item)).toBeDefined();
});
+18 -18
View File
@@ -7,7 +7,7 @@ describe('directives', function () {
$rootScope;
// Load the myApp module, which contains the directive
beforeEach(module('CardsForScience'));
beforeEach(module('cardsForScience'));
// beforeEach(module('Rules'));
// Store references to $rootScope and $compile
@@ -18,21 +18,21 @@ describe('directives', function () {
$rootScope = _$rootScope_;
}));
it('Replaces the element with the appropriate content', function () {
// define a rule for testing
$rootScope.rule = Rules.rules[0];
// Compile a piece of HTML containing the directive
var element = $compile('<div cfs-rule="rule" ng-model="rule"></div>')($rootScope);
// fire all the watches, so the scope expressions will be evaluated
// $rootScope.$digest();
$rootScope.$apply();
// Check that the compiled element contains the templated content
var html = element.html();
expect(html).toContain("<select");
expect(html).toContain("<option");
expect(html).toContain("Next card must not have the same");
});
// it('Replaces the element with the appropriate content', function () {
// // define a rule for testing
// $rootScope.rule = Rules.rules[0];
//
// // Compile a piece of HTML containing the directive
// var element = $compile('<div cfs-rule="rule" ng-model="rule"></div>')($rootScope);
//
// // fire all the watches, so the scope expressions will be evaluated
// // $rootScope.$digest();
// $rootScope.$apply();
//
// // Check that the compiled element contains the templated content
// var html = element.html();
// expect(html).toContain("<select");
// expect(html).toContain("<option");
// expect(html).toContain("Next card must not have the same");
// });
});
+75 -116
View File
@@ -2,154 +2,113 @@
/* jasmine specs for filters go here */
var allCards;
beforeEach(function(){
allCards = Helpers.loadFile('json/elements.json');
});
describe('Rules', function () {
var card, lastCards;
beforeEach(
module('Rules')
);
beforeEach(function(){
var card, lastCards,Rule,rules;
beforeEach(module('cardsForScience'));
beforeEach(inject(function (game) {
allCards=game.cards;
lastCards = _.sampleSize(allCards,4);
card = _.sample(allCards);
});
Rule=game.Rule;
rules=game.rules;
}));
describe('Rule', function () {
it('should test false on false', function () {
var rule = new Rules.Rule('1',function(){return false;},{},{},[]);
var rule = new Rule('1',function(){return false;},{},{},[]);
var res = rule.test(card,lastCards,allCards);
expect(res).toBe(false);
});
it('should test false on assertion error', function () {
var rule = new Rules.Rule('2',function(){return chai.expect(1).to.equal(0);},{},{},[]);
var rule = new Rule('2',function(){return chai.expect(1).to.equal(0);},{},{},[]);
var res = rule.test(card,lastCards,allCards);
expect(res).toBe(false);
});
it('should test true on assertion', function () {
var rule = new Rules.Rule('3',function(){return chai.expect(1).to.equal(1);},{},{},[]);
var rule = new Rule('3',function(){return chai.expect(1).to.equal(1);},{},{},[]);
var res = rule.test(card,lastCards,allCards);
expect(res).toBe(true);
});
it('should test true on true', function () {
var rule = new Rules.Rule('4',function(){return true;},{},{},[]);
var rule = new Rule('4',function(){return true;},{},{},[]);
var res = rule.test(card,lastCards,allCards);
expect(res).toBe(true);
});
it('should throw test on error', function () {
var rule = new Rules.Rule('5',function(){throw new Error('test');return true;},{},{},[]);
var rule = new Rule('5',function(){throw new Error('test');return true;},{},{},[]);
expect(function(){
rule.test(card,lastCards,allCards);
}).toThrow();
});
});
Rules.rules.forEach(function(rule){
describe('rule: "'+rule.describe()+'"', function () {
it('should test', function () {
var res = rule.test(card,lastCards,allCards);
Boolean(res);
});
it('should describe itself', function () {
var desc = rule.describe();
expect(typeof desc).toBe('string');
expect(desc).not.toContain(/[{}]+/);
});
it('should describeOptions', function () {
var desc = rule.describeOptions();
expect(typeof desc).toBe('string');
expect(desc).not.toContain(/[{}]+/);
});
it('should describeVariations', function () {
var desc = rule.describeVariations();
expect(desc instanceof Array).toBe(true);
expect(desc).not.toContain(/[{}]+/);
});
it('should genHints', function () {
var hints = rule.genHints();
expect(hints instanceof Array).toBe(true);
expect(hints.length).toBeGreaterThan(0);
expect(hints.join('')).not.toContain(/[{}]+/);
});
it('should set options', function () {
var opts1 = rule.options;
var opts = rule.setOptions({a24tgsdgtg43t5fd:1});
expect(typeof opts).toBe('object');
expect(opts).not.toEqual(opts1);
});
it('should randomize', function () {
var opts1 = rule.options;
var opts = rule.randomize();
expect(typeof opts).toBe('object');
expect(opts).not.toEqual(opts1);
});
// now check each rule permutation
var options=Object.keys(rule.optionDesc);
options.forEach(function(option){
var vals = rule.optionDesc[option].possibleVals;
var def = rule.optionDefaults[option];
describe('option: '+option, function () {
for (var i = 0; i < vals.length; i++) {
it('should test with val: '+vals[i],function(){
var options={};
options[option]=vals[i];
rule.setOptions(options);
var res = rule.test(card,lastCards,allCards);
expect(typeof res).toBe('boolean');
});
}
it('default should be in possible vals '+option+' = '+vals[i],function(){
expect(vals).toEqual(jasmine.arrayContaining([def]));
});
describe('Each rule', function () {
Rules.rules.forEach(function(rule){
describe('rule: "'+rule.describe()+'"', function () {
it('should test', function () {
var res = rule.test(card,lastCards,allCards);
Boolean(res);
});
it('should describe itself', function () {
var desc = rule.describe();
expect(typeof desc).toBe('string');
expect(desc).not.toContain(/[{}]+/);
});
it('should describeOptions', function () {
var desc = rule.describeOptions();
expect(typeof desc).toBe('string');
expect(desc).not.toContain(/[{}]+/);
});
it('should describeVariations', function () {
var desc = rule.describeVariations();
expect(desc instanceof Array).toBe(true);
expect(desc).not.toContain(/[{}]+/);
});
it('should genHints', function () {
var hints = rule.genHints();
expect(hints instanceof Array).toBe(true);
expect(hints.length).toBeGreaterThan(0);
expect(hints.join('')).not.toContain(/[{}]+/);
});
it('should set options', function () {
var opts1 = rule.options;
var opts = rule.setOptions({a24tgsdgtg43t5fd:1});
expect(typeof opts).toBe('object');
expect(opts).not.toEqual(opts1);
});
it('should randomize', function () {
var opts1 = rule.options;
var opts = rule.randomize();
expect(typeof opts).toBe('object');
expect(opts).not.toEqual(opts1);
});
});
// now check each rule permutation
var options=Object.keys(rule.optionDesc);
options.forEach(function(option){
var vals = rule.optionDesc[option].possibleVals;
var def = rule.optionDefaults[option];
describe('option: '+option, function () {
for (var i = 0; i < vals.length; i++) {
it('should test with val: '+vals[i],function(){
var options={};
options[option]=vals[i];
rule.setOptions(options);
var res = rule.test(card,lastCards,allCards);
expect(typeof res).toBe('boolean');
});
}
it('default should be in possible vals '+option+' = '+vals[i],function(){
expect(vals).toEqual(jasmine.arrayContaining([def]));
});
});
});
});
});
});
describe('Rules compilation', function () {
var $compile,
$rootScope;
beforeEach(
module('cardsForScience')
);
// Store references to $rootScope and $compile
// so they are available to all tests in this describe block
beforeEach(inject(function (_$compile_, _$rootScope_) {
// The injector unwraps the underscores (_) from around the parameter names when matching
$compile = _$compile_;
$rootScope = _$rootScope_;
}));
Rules.rules.forEach(function(rule){
describe('rule: "'+rule.describe()+'"', function () {
it('should render using cfs-rule directive', function () {
// define a rule for testing
$rootScope.rule = Rules.rules[0];
// Compile a piece of HTML containing the directive
var element = $compile('<div cfs-rule="rule" ng-model="rule"></div>')($rootScope);
// fire all the watches, so the scope expressions will be evaluated
// $rootScope.$digest();
$rootScope.$apply();
// Check that the compiled element contains the templated content
var html = element.html();
expect(html).toContain("<select");
expect(html).toContain("<option");
expect(html).toContain("Next card must not have the same");
});
});
});