requirejs を使用している場合は、やるべきことがたくさんあります。
まず、karma-requirejs
プラグインをpackage.json
"karma-requirejs": "~0.1.0",
次に、構成ファイルを変更する必要があります。一部を追加requirejs
するframeworks
必要があります 次に、必要なものを除外しますmain.js
pattern
次に、構成ではなく構成を介しinclude
てすべてのライブラリファイルを追加します
必要なものを追加する必要がありますmain-test.js
(下部にあるテスト記述用の構成ファイル)
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', 'requirejs'],
files: [
{pattern: 'app/bower_components/jquery/jquery.min.js', included: false},
{pattern: 'app/bower_components/angular/angular.min.js', included: false},
{pattern: 'app/bower_components/angular-resource/angular-resource.min.js', included: false},
{pattern: 'app/bower_components/angular-mocks/angular-mocks.js', included: false},
{pattern: 'app/scripts/*.js', included: false},
{pattern: 'app/scripts/**/*.js', included: false},
{pattern: 'test/spec/**/*Spec.js', included: false},
'test/main-test.js'
],
exclude: ['app/scripts/main.js'],
port: 8082,
logLevel: config.LOG_DEBUG,
autoWatch: false,
browsers: ['Chrome'],
singleRun: false
});
};
を作成しますmain-test.js
。
では、依存関係として配置するすべてのテスト ファイルを取得する必要があります。
次に、古典的なrequirejs構成を実行し(カルマ定数baseUrl
を使用/base
することに注意してください)、最後に次のコードでカルマを開始します。window.__karma__.start();
例 :
var tests = [];
for (var file in window.__karma__.files) {
if (window.__karma__.files.hasOwnProperty(file)) {
if (/Spec\.js$/.test(file)) {
tests.push(file);
}
}
}
require.config({
// Karma serves files from '/base'
baseUrl: '/base/app/scripts',
paths: {
jquery: '../bower_components/jquery/jquery.min',
angular: '../bower_components/angular/angular.min',
angularMocks: '../bower_components/angular-mocks/angular-mocks',
ngResource: '../bower_components/angular-resource/angular-resource.min'
},
shim: {
jquery: {
exports: '$'
},
angular: {
deps: [ 'jquery', 'bootstrap'],
exports: 'angular'
},
ngResource: {
deps: [ 'angular' ],
exports: 'ngResource'
},
angularMocks: {
deps: [ 'ngResource' ],
exports: 'angularMocks'
}
},
priority: [
'angular'
],
// ask Require.js to load these files (all our tests)
deps: tests
});
require(tests, function(){
window.__karma__.start();
});
テストファイルで:
beforeEach(angular.module('myApp'));
に変更beforeEach(module('myApp'));
あなたの定義のパラメータをそのように変更してください:
define(['angular',
'myApp',
'angularMocks',
'MyCtrl'
], function(angular, myApp, angularMocks, MyCtrl)
コントローラーを挿入するには、それを行うだけです(MyCtrl
require関数のパラメーターを配置する必要があります):
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
$controller(MyCtrl, {
$scope: scope
});
}));
そして最後に :
it('should call crudListMethods', function () {
expect(scope.test).toBe("sth");
});
これでうまくいくはずです!それが役に立てば幸い !