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()
это очень возможно, и мне это очень нравится. Есть ли способ сделать это в мокко?
Спасибо!
Ответы
Ответ 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
})
});