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);