为了账号安全,请及时绑定邮箱和手机立即绑定

Jest:尽管期望/接收值不匹配,但异步测试错误地通过

Jest:尽管期望/接收值不匹配,但异步测试错误地通过

白猪掌柜的 2021-06-22 17:14:21
Jest 中的以下测试不应通过:const targetFile = require("../targetFile.js");fetch = jest.fn(() => Promise.resolve('file scoped default value'));test('diffFileFetch', () => {  fetch.mockImplementation(() => new Promise((resolve, reject) => {    resolve('wrong value');  }));  targetFile.diffFileFetch()    .then(async data => {      await expect(data).toEqual('correct value');    })    .catch(e => console.log(e, `=====e=====`));});catch 块触发但测试仍然通过。这是什么原因,应该如何解决?PASS  views/admin/__tests__/CurrentCouponListingSection.test.js  ✓ diffFileFetch (6ms) console.log views/admin/__tests__/testFile.test.js:59    { Error: expect(received).toEqual(expected) // deep equality    Expected: "correct value"    Received: "wrong value"        at targetFile.diffFileFetch.then (/var/www/html/wptest2/wp-content/plugins/fvc/views/admin/__tests__/testFile.test.js:58:1)        at <anonymous>        at process._tickCallback (internal/process/next_tick.js:188:7)      matcherResult:        { actual: 'wrong value',         expected: 'correct value',         message: [Function],         name: 'toEqual',         pass: false } } '=====e====='也试过从 .then() 中删除 async/await。没有不同。
查看完整描述

1 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

测试在Promise回调运行之前完成,所以它通过了......然后错误被记录下来。


如果测试包含异步代码,则您需要使用done:


test('diffFileFetch', done => {  // <= use done

  fetch.mockImplementation(() => new Promise((resolve, reject) => {

    resolve('wrong value');

  }));


  targetFile.diffFileFetch()

    .then(data => {

      expect(data).toBe('correct value');

      done();  // <= now call done

    })

});

...返回Promise:


test('diffFileFetch', () => {

  fetch.mockImplementation(() => new Promise((resolve, reject) => {

    resolve('wrong value');

  }));


  return targetFile.diffFileFetch()  // <= return the Promise

    .then(data => {

      expect(data).toBe('correct value');

    })

});

...或者使用async测试功能和await在Promise:


test('diffFileFetch', async () => {  // <= async test function

  fetch.mockImplementation(() => new Promise((resolve, reject) => {

    resolve('wrong value');

  }));


  const data = await targetFile.diffFileFetch()  // <= await the Promise

  expect(data).toBe('correct value');

});


查看完整回答
反对 回复 2021-06-24
  • 1 回答
  • 0 关注
  • 372 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信