До и после каждой утечки в другие тесты

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

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

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

грубый конфиг

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

1 ответ

Решение

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

Если вы хотите, чтобы они использовались только для it внутри вашего defineмодуль, вы должны поместить их в 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);
        });
    });
});
Другие вопросы по тегам