テンプレートを挿入してコンパイルするコードをスペックファイルで繰り返します。私はこのコードをヘルパー関数に抽出して、物事をドライに保ちました。問題は、ヘルパー関数のbeforeEach
に配置しようとすることにあると思います。これが私が関数に抽象化しようとしている私のコードの一部です:
beforeEach(module('app/views/header.html'));
beforeEach(inject(function($templateCache, $compile, $rootScope) {
template = $templateCache.get('app/views/header.html');
$templateCache.put('views/header.html', template);
var directive = angular.element('<clinical-header></clinical-header>');
element = $compile(directive)($rootScope);
$rootScope.$digest();
}));
これが私が作成したヘルパー関数です:
var setupTemplate = function(templateName, element) {
beforeEach(module('app/views/' + templateName));
beforeEach(inject(function($templateCache, $compile, $rootScope) {
var template = $templateCache.get('app/views/' + templateName);
$templateCache.put('views/' + templateName, template);
var directive = angular.element(element);
element = $compile(directive)($rootScope);
$rootScope.$digest();
}));
そして今、これはヘルパー関数の呼び出しです:
setupTemplate('header.html', '<clinical-header></clinical-header>');
ヘルパー関数の最後では、すべてが正常に見えますが、it
ブロックにジャンプすると、すべてが未定義です。複数のbeforeEach
を抽出できますか?これを行う正しい方法は何ですか?また、ジャスミンヘルパー関数を配置する適切な場所はどこにあり、それはどのように行われますか?
特定のdescribe関数のコンテキスト外に記述することで、グローバルなbeforeEach()関数を作成できます。これらの関数を使用してspec-helper.jsクラスを作成し、Karmaconfigを介してロードする必要があります。
BeforeEach関数は、実行しているit関数の前に実行されることに注意してください(グローバルであるため)。
デモのために fiddle を作成しましたが、Karmaの重要な点は、ファイルを構成に追加して、ブラウザーによってロードされるようにすることです。
スペックヘルパー:
var myGlobal;
beforeEach(function() {
// This will run before any it function.
// Resetting a global state so the change in this function is testable
myGlobal = 10
});
テストスイート:
describe('first suite', function(){
it('is a test', function(){
expect(myGlobal).toBe(10);
// Reset the value to show that beforeEach is executed for each it function
myGlobal = 20;
expect(myGlobal).toBe(20);
});
it('is another test', function($location){
expect(myGlobal).toBe(10);
myGlobal = 20;
expect(myGlobal).toBe(20);
});
});