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=====`));
});
Run Code Online (Sandbox Code Playgroud)
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====='
Run Code Online (Sandbox Code Playgroud)
也试过
从 .then() 中删除 async/await。没有不同。
测试在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
})
});
Run Code Online (Sandbox Code Playgroud)
...返回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');
})
});
Run Code Online (Sandbox Code Playgroud)
...或者使用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');
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1584 次 |
| 最近记录: |