2016-10-03 2 views
3

Я использую grunt-contrib-jasmine для тестирования своих модулей AMD. Из коробки кажется, что тесты влияют друг на друга.before- and afterEach утечка в другие тесты

Выход не разделяет тесты по файлам. Это можно проверить, зарегистрировав что-то в тестах beforeEach. Тот же обратный вызов выполняется для всех тестовых файлов во всех тестах.

Как я могу сделать тесты изолированными от eachother, то есть разделенными тестовыми спецификациями? Единственное решение - добавить еще один уровень гнездования?

хрюкать конфигурации

options: { 
    specs: 'test/specs/unit/**/*spec.js', 
    keepRunner: true, 
    template: require('grunt-template-jasmine-requirejs'), 
    templateOptions: { 
     requireConfig: requireConfig 
    } 
} 

sample1.spec.js:

define(['Squire', 'sinon'], function(Squire, sinon){ 
    'use strict'; 

    var sut, 
     injector, 
     fakeServer; 

    beforeEach(function(done){ 
     fakeServer = sinon.fakeServer.create(); 
     console.log('create fake server'); // this is logged for all test files 
     injector = new Squire(); 
     injector.require(['core/http-service'], function(httpService) { 
      sut = httpService; 
      done(); 
     }); 
    }); 

    afterEach(function(){ 
     fakeServer.restore(); 
     injector.remove(); 
    }); 

    it('', function(){ 
     expect(1).toBe(1); 
    }); 
}); 
+0

Вы вложенности больше никаких тестов, кроме примера вы находитесь показывая здесь? –

+0

Существует несколько тестовых файлов 'x.spec.js' с 1-2 уровнями' describe() '. Мне действительно нужно иметь _all_ мои тесты в той же спецификации, чтобы этот плагин работал? – Johan

+0

Возможно, вы используете 'beforeEach' или' afterEach' в описании, который содержит вложенные 'описать', ожидая, что они будут влиять только на внутренний 'описать'? Может показаться очевидным, но стоит проверить. –

ответ

3

Проблема заключается в том, что у вас есть beforeEach и afterEach за пределами describe. Это означает, что они будут вызваны до и после каждого теста, который находит grunt-contrib-jasmine.

Если вы хотите использовать их только для it внутри вашего define -ED модуля, вы должны поместить их внутрь describe:

define(['Squire', 'sinon'], function(Squire, sinon){ 
    'use strict'; 

    describe('some description', function(){ 

     var sut, 
      injector, 
      fakeServer; 

     beforeEach(function(done){ 
      fakeServer = sinon.fakeServer.create(); 
      console.log('create fake server'); // this is logged for all test files 
      injector = new Squire(); 
      injector.require(['core/http-service'], function(httpService) { 
       sut = httpService; 
       done(); 
      }); 
     }); 

     afterEach(function(){ 
      fakeServer.restore(); 
      injector.remove(); 
     }); 

     it('', function(){ 
      expect(1).toBe(1); 
     }); 
    }); 
}); 
+0

Да, как я тогда думал. Мне было любопытно, есть ли способ рассказать плагину, чтобы разделить их по имени без вложенности. Спасибо за проверку. Кстати, вы не можете получить щедрость еще 23 часа :) – Johan