Question
如何测试异步(子组件API接受的是Promise方法)
原因
因为测实际的Promise方法比较困难,所以用typemoq
解决方案
尝试typemoq
https://github.com/florinn/typemoq
测试文件里面可以这么写
const imageProviderMock = TypeMoq.Mock.ofType<IImageProvider>();
imageProviderMock
.setup(f => f.fetch(TypeMoq.It.isAny()))
.returns(() => Promise.resolve(imageInfos));
const gallery = await shallow(
<Gallery
loggerFactory={loggerFactory}
translator={translator}
imageProvider={imageProviderMock.object}
cache={cacheMock.object}
filterProvider={filterProviderMock.object}
/>
);
imageProviderMock.verify(
x => x.fetch(TypeMoq.It.isAny()),
TypeMoq.Times.atLeastOnce()
);
后面可以跟一些组件渲染的测试
expect(gallery.find(ImageFrame)).have.lengthOf(2);
//模拟一个promise.resolve操作
const imageProviderMock = TypeMoq.Mock.ofType<IImageProvider>();
imageProviderMock
.setup(f => f.fetch(TypeMoq.It.isAny()))
.returns(() => Promise.resolve(imageInfos));
//组件浅渲染用async和await
const gallery = await shallow(
<Gallery
loggerFactory={loggerFactory}
translator={translator}
imageProvider={imageProviderMock.object}
cache={cacheMock.object}
filterProvider={filterProviderMock.object}
/>
);
//证明promise.resolve至少被调用一次
imageProviderMock.verify(
x => x.fetch(TypeMoq.It.isAny()),
TypeMoq.Times.atLeastOnce()
);
//后面可以跟一些组件渲染的测试
expect(gallery.find(ImageFrame)).have.lengthOf(2);