Как создать помощник для Jasmine/Angular для объединения нескольких элементов beforeEach

Я продолжаю повторять некоторый код в моем spec файле, который вводит шаблон, а затем компилирует его. Я извлек этот код в вспомогательную функцию, чтобы держать вещи сухими. Я считаю, что проблема заключается в попытке установить 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, все это undefined. Могу ли я извлечь несколько beforeEach? Каков правильный способ сделать это? Кроме того, где подходящее место для размещения функций-жасминовых помощников и как это делается?

Ответы

Ответ 1

Вы можете создавать глобальные функции beforeEach(), записывая их вне контекста конкретной функции описания. Вы должны создать класс spec-helper.js с помощью этой функции и загрузить его через конфигурацию Karma.

Обратите внимание, что перед всеми функциями, которые вы выполняете (поскольку они глобальны), будут выполняться перед всеми функциями.

Я создал fiddle, чтобы продемонстрировать, однако ключ с кармой состоит в том, чтобы добавить файл в конфигурацию, чтобы он загружался браузер.

Специальный помощник:

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
});

Test Suite:

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);
  });
});