web-dev-qa-db-ja.com

Jasmine / Angularが複数のbeforeEachを組み合わせるためのヘルパーを作成するにはどうすればよいですか?

テンプレートを挿入してコンパイルするコードをスペックファイルで繰り返します。私はこのコードをヘルパー関数に抽出して、物事をドライに保ちました。問題は、ヘルパー関数の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を抽出できますか?これを行う正しい方法は何ですか?また、ジャスミンヘルパー関数を配置する適切な場所はどこにあり、それはどのように行われますか?

20
jhamm

特定の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);
  });
});
16
Eitan Peer