Jasmineユニットテストを実際に実行する際に問題が発生しているようです。 logLevelをLOG_DEBUGに設定することで、すべてのスクリプトが読み込まれることを確認しました。私の単体テストはサービステスト@ https://github.com/angular/angular-seed/blob/master/test/unit/servicesSpec.js と同じです。
また、私はTestacularを使用しており(Karmaに名前が変更される前)、この問題があったことを思い出しません。 Chrome=が実行されるようですが、「デバッグ」ボタンを手動で押す必要があります。このボタンを押しても、テストが実行されません。
システムの詳細:
これが私のモジュールコードです(Scripts/main.js):
angular.module('sb.services', []).value('version', '0.0.1').value('amplify', amplify);
angular.module('sb.directives', []);
angular.module('sb.filters', []);
angular.module('sb.controllers', []).controller('SbController', [
'$scope',
'amplify',
function ($scope, amplify) {
$scope.message = 'Hello World! (amplify exists?=' + !!amplify + ')';
}
]);
angular.module('sb', [
'sb.services',
'sb.directives',
'sb.filters',
'sb.controllers'
]);
これが私の仕様です(Test/unit/servicesSpec.js):
'use strict';
describe('my services', function () {
beforeEach(module('sb.services'));
describe('version', function () {
it('should return current version', inject(function(version) {
expect(version).toEqual('0.0.1');
}));
});
});
これが私のkarma.conf.jsファイルです。
// Karma configuration
// Generated on Mon Apr 15 2013 20:56:23 GMT-0400 (Eastern Daylight Time)
// base path, that will be used to resolve files and exclude
basePath = '';
// list of files / patterns to load in the browser
files = [
JASMINE,
JASMINE_ADAPTER,
'Vendor/angular-1.0.6/angular.js',
'Vendor/angular-1.0.6/angular-*.js',
'Vendor/json2/json2.js',
'Vendor/jquery/jquery-1.8.2.js',
'Vendor/amplify/amplify.js',
'Scripts/main.js',
'Test/unit/*.js'
];
// list of files to exclude
exclude = [
];
// test results reporter to use
// possible values: 'dots', 'progress', 'junit'
reporters = ['progress'];
// web server port
port = 9876;
// cli runner port
runnerPort = 9100;
// enable / disable colors in the output (reporters and logs)
colors = true;
// level of logging
// possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
logLevel = LOG_WARN;
// enable / disable watching file and executing tests whenever any file changes
autoWatch = false;
// Start these browsers, currently available:
// - Chrome
// - ChromeCanary
// - Firefox
// - Opera
// - Safari (only Mac)
// - PhantomJS
// - IE (only Windows)
browsers = ['Chrome'];
junitReporter = {
outputFile: 'Test/out/unit.xml',
suite: 'unit'
};
// If browser does not capture in given timeout [ms], kill it
captureTimeout = 60000;
// Continuous Integration mode
// if true, it capture browsers, run tests and exit
singleRun = false;
私の最後の答えは間違っていました(jamineおよびjasine_adapter行をangular.js行の下に移動)。この特定の問題は修正されましたが、他の問題が発生しました。代わりに、私が修正したのは次のように、angular- *ではなく、angular-mocksファイルのみを指定することでした。
JASMINE,
JASMINE_ADAPTER,
'Vendor/angular-1.0.6/angular.js',
'Vendor/angular-1.0.6/angular-mocks.js',
'Vendor/json2/json2.js',
'Vendor/jquery/jquery-1.8.2.js',
'Vendor/amplify/amplify.js',
'Scripts/main.js',
'Test/unit/*.js'
同じ問題が発生しただけで、autoWatch = true
Karmaがテストを自動的に実行する前。
または、karma.conf.jsでexcludeセクションを使用できます
exclude = [
'Vendor/angular-1.0.6/angular-scenario.js'
];
私は上記のすべてを試しましたが、最終的に...
私のkarma.conf.js
requirejs依存関係を削除しました。例:
frameworks: ['jasmine', 'requirejs'],
に:
frameworks: ['jasmine'],
JASMINEおよびJASMINE_ADAPTERを使用してこの問題を解決しようとしている場合、これはサポートされなくなりました(少なくともKarmaバージョン0.10.2では)。
代わりに:
frameworks: ['jasmine']
karma構成ファイル内。あなたはこれについて読むことができます ここ 。
また、ファイル配列でパターンにincluded: false
を設定したこともわかりました。 included
は、Javascriptファイルを手動で含めたい場合(たとえばrequire.jsを使用する場合)にのみ使用されます。すべてのテストがそのパターンからロードされる場合は、次のようなメッセージが表示されます。
PhantomJS 1.9.2 (Linux): Executed 0 of 0 ERROR (0.151 secs / 0 secs)
テストを含むファイルは含まれないからです。含まれている場合のデフォルトがtrue
であるため、パターンのファイル配列からincluded: false
を削除すると、これが修正されました。
私の場合、singleRun
はfalse
に設定されていました
ソリューション:// Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits singleRun: true