Запускать тесты несколько раз с разными beforeEach - PullRequest
0 голосов
/ 18 марта 2019

Итак, у меня есть эти 2 случая в моих тестах.Первый работает нормально, во втором я пытаюсь извлечь объявление beforeEach извне, и оно терпит неудачу, но я не понимаю почему.Это простой случай, в основном я пытаюсь определить массив и создать цикл для него, чтобы запустить несколько тестов с различным объявлением параметров beforeEach.

CASE 1

var params;

describe('When initializing', function () {
    beforeEach(function () {
        params = {
            name: 'test 1'
        };         
    });

    it('should ..', function () {                              
        params.name = 'test 2';
        expect(...); => success
    });

    it('should ..', function () {                              
        expect(...); => success because it expects params.name to be 'test 1' and it is 'test 1'
    });
});

Случай 2

var params;

var test = {
    name: 'test 1'
};

describe('When initializing', function () {
    beforeEach(function () {
        params = test;            
    });

    it('should ..', function () {                              
        params.name = 'test 2';
        expect(...); => success
    });

    it('should ..', function () {                              
        expect(...); => fails because it expects params.name to be 'test 1' and it is 'test 2'
    });
});

Во втором тесте, если я console.log(test.name) внутри описания, я получу test 2, каким-то образом он был переопределен, даже если предыдущий it имел params.name = 'test 2';, а не test.name = 'test 2';

1 Ответ

1 голос
/ 18 марта 2019

Разница в том, что в случае 1 вы создаете новый объект каждый раз, когда вызывается каждый объект, а в случае 2 - нет.

В сочетании с этим факт, что ваш первый тест мутирует объект.Если все тесты ссылаются на один и тот же объект (т. Е. Случай 2), то эта мутация повлияет на любой код, который выполняется после первого теста.Если вместо этого объект перезаписывается перед каждым тестом (случай 1), то мутация не повлияет на другие тесты.

Существует несколько вариантов решения этой проблемы.Один состоит в том, чтобы просто сохранить случай 1;Сбрасывая в известное состояние каждый раз, вы можете получить чистое состояние, чтобы все тесты работали.Другой вариант - не изменять объект.Возможно, тесты могут скопировать объект, а затем изменить эту копию.

...