【问题标题】:Using expect.any(Object) does not match CancelToken in Jest在 Jest 中使用 expect.any(Object) 与 CancelToken 不匹配
【发布时间】: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


【解决方案1】:

实际上,我的测试是错误的,当我删除responseType: 'text', 行时,它起作用了!

【讨论】:

    猜你喜欢
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2019-07-25
    • 2020-10-19
    • 2020-06-24
    • 1970-01-01
    相关资源
    最近更新 更多