Подтвердить что ты не робот

Mocha передать переменную в следующий тест

describe('some test', function(){
    // Could put here a shared variable
    it('should pass a value', function(done){
        done(null, 1);
    });
    it('and then double it', function(value, done){
        console.log(value * 2);
        done();
    });
});

Вышеупомянутое в настоящее время не будет работать в мокко.

Решение состоит в том, чтобы иметь переменную, разделяемую между тестами, как показано выше.

С async.waterfall() это очень возможно, и мне это очень нравится. Есть ли способ сделать это в мокко?

Спасибо!

4b9b3361

Ответ 1

Гораздо предпочтительнее изолировать тесты, чтобы один тест не зависел от вычисления, выполненного в другом. Позвольте вызвать тест, который должен пройти тест значения A и тест, который должен получить его тест B. Некоторые вопросы, которые следует учитывать:

  • Являются ли тесты A и тесты B действительно двумя разными тестами? Если нет, их можно объединить.

  • Является ли тест А предназначен для того, чтобы дать тест B с приспособлением для тестирования? Если это так, тест A должен стать обратным вызовом для вызова before или beforeEach. Вы в основном передаете данные, назначая их переменным в закрытии describe.

    describe('some test', function(){
        var fixture;
    
        before(function(done){
            fixture = ...;
            done();
        });
    
        it('do something', function(done){
            fixture.blah(...);
            done();
        });
    });
    

Я прочитал код Mocha и при условии, что я ничего не забываю, нет способа вызвать describe, it или обратный вызов done для пропуска значений. Таким образом, метод выше.

Ответ 2

Очень согласен с тем, что сказал Луи, и таковы причины, по которым Моча фактически не поддерживает его. Подумайте об асинхронном методе, на который вы ссылались; если ваш первый тест не сработает, вы получите отказ водопада на всех остальных.

Ваш единственный способ сделать это, как вы говорите, вставить переменную вверху:

describe('some test', function(){
    var value = 0;
    it('should pass a value', function(done){
        value = 5;
        done();
    });
    it('and then double it', function(done){
        console.log(value * 2); // 10
        done();
    });
});

Ответ 3

Также можно добавить в костюм или объект контекста.

В этом примере он добавлен в объект-костюм

describe('suit', function(){
    before(() => {
        this.suitData = 'suit';
    });

    beforeEach(() => {
        this.testData = 'test';
    });


    it('test', done => {
         console.log(this.suitData)// => suit
         console.log(this.testData)// => test
    })
});