Javascript 异步/等待模拟
我想知道在测试中是否可以使用async/await做类似的事情 例如,通过常规承诺,我可以在单元测试中模拟这样的承诺Javascript 异步/等待模拟,javascript,async-await,ecmascript-2017,Javascript,Async Await,Ecmascript 2017,我想知道在测试中是否可以使用async/await做类似的事情 例如,通过常规承诺,我可以在单元测试中模拟这样的承诺 class Foo { fn() { this.someService.someFn().then((data) => this.data = data); } } describe("something", function() { beforeEach(function() { this.instance = n
class Foo {
fn() {
this.someService.someFn().then((data) => this.data = data);
}
}
describe("something", function() {
beforeEach(function() {
this.instance = new Foo();
// Can this part be mocked out with the same idea, when someService.someFn is async fn
this.instance.someService = {
someFn: function() {
return {
then: function(cb) {
cb("fake data");
}
}
}
}
this.instance.fn();
});
it("a test", function() {
expect(this.instance.data).toBe("fake data");
});
});
(如果我改写了承诺,我就不必处理冲洗之类的事情。)
但是现在,fn()什么时候会变成这个
class Foo {
async fn() {
try {
this.data = await this.someService.somefn();
} catch() {
}
}
}
我在beforeach中所做的覆盖将不再有效。
所以我这里的问题是…我可以做一些类似于用异步/等待代码样式覆盖承诺的事情吗
这里的想法是,我想模拟出我正在进行单元测试的函数可能使用的外部依赖项,比如“someService”。在那个特定的单元测试中,我希望someService.someFn能够正常工作,并且我可以模拟它的响应。其他测试检查“someFn”的有效性。首先,您的旧mock应该可以很好地使用
async
/wait
。不过,最好使用Promise.resolve
而不是使用返回对象。然后使用方法:
someFn: () => Promise.resolve('fake data')
但是,由于您已经在使用async
/await
,您也可以在测试中利用它:
someFn: async () => 'fake data'