【发布时间】:2021-08-27 04:50:33
【问题描述】:
我最近将一个项目中的一些文件转换为 TypeScript,但以下测试开始失败:
expect(mocks.request).toHaveBeenCalledWith({
headers: { 'Content-Type': 'bar' },
method: 'put',
params: file.slice(),
path: 'foo',
responseType: 'text',
cancelToken: expect.any(Object),
});
这是错误信息:
expect(jest.fn()).toHaveBeenCalledWith(...expected)
- Expected
+ Received
Object {
- "cancelToken": Any<Object>,
+ "cancelToken": CancelToken {
+ "promise": Promise {},
+ },
"headers": Object {
"Content-Type": "bar",
这是在这种情况下测试的一段代码:
this.cancelToken = axios.CancelToken.source();
return request({
method: 'put',
path: presignedUrl,
params: file.slice(),
cancelToken: this.cancelToken.token,
headers: {
'Content-Type': contentType,
},
});
我尝试将测试更改为使用expect.anything(),如下所示:
cancelToken: expect.anything(),
但我又遇到了一个错误:
- Expected
+ Received
Object {
- "cancelToken": Anything,
+ "cancelToken": CancelToken {
+ "promise": Promise {},
+ },
如何修复我的测试代码?
注意:我添加了一个console.log(this.cancelToken.token) 来比较在主分支和新分支中传递给函数request 的值,它们是相同的。所以我不知道为什么 Jest 会这样失败
【问题讨论】:
-
responseType: 'text',来自哪里?删除它 -
很好,成功了!在转换为 Typescript 的过程中也删除了这一行,但我没有意识到这是问题所在,因为错误消息并不清楚!
标签: javascript typescript axios jestjs