私は Yeoman を使用してプロジェクトをセットアップしてきましたが、機能トグルを適用する角度モジュール プロジェクトを構築しようとしていました。ユニットレベルでのジャスミンのテストに夢中になっています。これが私のテストの1つです。
var scope, Rules;
var elm;
// load the controller's module
beforeEach(function() {
module('featureToggle.directives', function($provide) {
$provide.decorator('Rules', function($delegate) {
$delegate.resolveByName = jasmine.createSpy();
return $delegate;
});
});
inject(function(_Rules_) {
Rules = _Rules_;
});
});
beforeEach(inject(function($rootScope, $compile) {
scope = $rootScope.$new();
elm = angular.element(
'<h1 feature-toggle feature-name="hello">' +
'Hello World' +
'</h1>');
scope = $rootScope;
$compile(elm)(scope);
scope.$digest();
}));
it('should render the content when the feature is enabled', function() {
jasmine.spyOn(Rules, 'resolveByName').andReturn(false);
var contents = elm.find('h1');
expect(contents.eq(0)).toHaveClass('hidden');
});
私は奇妙な失敗をしています。
TypeError: 'undefined' is not a function (evaluating 'jasmine.spyOn(Rules, 'resolveByName')')
karma.conf は非常にバニラです。
frameworks = ['jasmine'];
// list of files / patterns to load in the browser
files = [
JASMINE,
JASMINE_ADAPTER,
'app/components/angular/angular.js',
'app/components/angular-mocks/angular-mocks.js',
'src/*.js',
'src/**/*.js',
'test/mock/**/*.js',
'test/spec/**/*.js'
];
私は概して PhantomJS を使用していますが、同じ問題が (同じエラーの別の方言で) Chrome に存在します。
$log を使用すると、実際には未定義のものはありません。だから私はむしろ迷っています。