Ich habe ein Modul, das importierte Klassen instanziiert und Methoden dieser Instanzen asynchron aufruft.Mock-Abhängigkeitsklassen pro getestete Instanz
Wie kann ich diese Methoden unabhängig voneinander pro Testfall verhöhnen, so dass diese Mocks nur zum Beispiel Sinn machen, die in einem Testfall erstellt werden, da ich Mocks am Ende des Tests nicht zuverlässig wiederherstellen kann?
Beispiel:
// 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 */ });
})
})
Wenn ich B und C in case1 spotten und diese wiederherstellen, synchron, wird C Config überschrieben werden, da case2 vor in dem Asynchron-Kontext C der Instanziierung läuft. Aus dem gleichen Grund kann ich Mocks nicht asynchrons nach assets1 wiederherstellen.
Es gibt ähnliche Fragen: Stubbing a class method with Sinon.js, How to mock dependency classes for unit testing with mocha.js? , aber sie decken nicht das Problem der asynchronen Mocks.