_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()
を使用すると、これが非常に可能になり、本当に気に入っています。モカでそれを実現する方法はありますか?
ありがとう!
あるテストが別のテストで実行される計算に依存しないように、テストを分離したままにしておくことをお勧めします。値テストAを渡すテストと、テストBを取得するテストを呼び出しましょう。考慮すべき質問がいくつかあります。
テストAとテストBは本当に2つの異なるテストですか?そうでない場合、それらを組み合わせることができます。
テストAは、テスト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
コールバックを呼び出して値を渡す方法はありません。したがって、上記の方法はそれです。
ルイが言ったことに非常に同意します、そして、それはモカが実際にそれをサポートしない理由です。参照した非同期メソッドを考えてください。最初のテストが失敗すると、残りのテスト全体でウォーターフォールエラーが発生します。
あなたが言うように、それを行う唯一の方法は、変数を上部に固定することです:
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();
});
});
また、スーツまたはコンテキストオブジェクトに追加することもできます。
この例では、スーツオブジェクトに追加されます
describe('suit', function(){
before(() => {
this.suitData = 'suit';
});
beforeEach(() => {
this.testData = 'test';
});
it('test', done => {
console.log(this.suitData)// => suit
console.log(this.testData)// => test
})
});