gpt4 book ai didi

javascript - 异步函数的行为与我对 Jest 的预期不同

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:54:49 27 4
gpt4 key购买 nike

Javascript Jest 测试框架 documentation说我需要在我的回调中添加 done() 来测试异步函数,否则该函数将在测试完成后返回,因此测试将失败。我已将 Jest 添加到我的 package.json 和以下两个文件中:

src.js:

function fetchData(cb) {
setTimeout(cb, 2000, 'peanut butter')
}

module.exports = fetchData

src.test.js:

const fetchData = require('./src')

test('the data is peanut butter', () => {
function callback(data) {
expect(data).toBe('peanut butter')
// no done() method!
}

fetchData(callback);
})

我用上面的代码通过了测试,但我认为我应该得到一个失败的测试,因为我的测试文件中没有 done()。我的 fetchData() 方法不是异步的吗?


编辑:按照 Nicholas 的回答,我将代码更改为:

src.js:

function fetchData(cb) {
setTimeout(cb, 2000, 'peanut')
}

module.exports = fetchData

src.test.js:

const fetchData = require('./src')

test('the data is peanut butter', () => {
function callback(data) {
expect(data).toBe('peanut butter')
done()
}

fetchData(callback);
})

测试运行器应根据 Jest 文档评估期望/断言并失败(peanut 通过,peanut butter 预期),但仍显示通过测试。

此外,Jest 文档说:

If done() is never called, the test will fail, which is what you want to happen

无论是否在回调中使用 done() 方法,无论是否将正确的 (peanut butter) 参数传递给回调 (即所有四个变体都通过了)。

最佳答案

如果您不将 done 作为参数传递,测试运行器会认为代码是同步的并且不会等待特殊情况发生 - 在这种情况下调用 done

因此,在您的断言/期望有机会运行之前,测试被标记为成功。

关于javascript - 异步函数的行为与我对 Jest 的预期不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47275706/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com