私は、インポートされたクラスをインスタンス化し、それらのインスタンスのメソッドを非同期に呼び出すモジュールを持っています。テストされたインスタンスごとのモック依存クラス
テストケースごとにこれらのメソッドを個別にモックすることができます。テストの最後にモックを確実に復元できないので、これらのモックはテストケース内で作成されるインスタンスにのみ意味があります。
例:私はCASE1でBとCを模擬し、同期的にそれらを復元した場合ケース2は、非同期コンテキストでCのインスタンス化する前に実行されるため
// tested class
import B from './b';
import C from './c';
export default class A {
someFunction() {
let instanceB = new B();
return instanceB.doSomething()
.then(() => this.doSomethingElse())
.then((data) => {
// async context, other tests will start before this.
let instanceC = new C(data);
});
}
}
// test
import A from './a';
describe('test',() => {
it('case1',() => {
a = new A();
// Mock B, C with config1
return a.someFunction().then(() => {/* asserts1 */ });
})
it('case2',() => {
a = new A();
// Mock B, C with config2
return a.someFunction().then(() => {/* asserts2 */ });
})
})
、Cのconfigは上書きされます。 同じ理由で、asserts1の後にモックを非同期に復元することはできません。
同様の質問があります:Stubbing a class method with Sinon.js、How to mock dependency classes for unit testing with mocha.js? しかし、それらは非同期モックの問題をカバーしていません。