我希望为一段具有异步功能的代码创建一些茉莉花规格。
在茉莉花文档中,它显示了示例:
bar()
使用done函数和setTimeout,我的问题是setTimout可能很脆弱,即在enviros中测试运行的延迟
是否有替代解决方案来进行此类测试,我不必使用超时?
提前致谢
答案 0 :(得分:1)
在此示例中,setTimeout
实际上是正在测试的函数。它用作异步函数的代表性示例。关键是您必须在测试完成后明确调用done()
。您的代码应该类似于:
it("takes a long time", function(done) {
myMethod('foo', 'bar', function callback() {
assert(...)
done();
}); // callback-style
}
it("takes a long time", function(done) {
myMethod('foo', 'bar').then(function() {
assert(...)
done();
}); // promise-style
});
it("takes a long time", async function(done) {
await myMethod('foo', 'bar')
assert(...)
done()
});
答案 1 :(得分:0)
记录的函数旨在说明在长时间运行的方法之后使用done
回调,并且不应该用于实际测试。
通常情况下,您会期望为一个长时间运行的函数提供一个回调,您可以在其中调用done
函数。例如,您可以编写一个涉及文件的单元测试,该文件需要很长时间才能写入数据:
it("writes a lot of data", function(done) {
var fd = 999; // Obtain a file descriptor in some way...
fs.write(fd, veryLongString, function (err, written, string) {
// Carry out verification here, after the file has been written
done();
});
同样,这只是说明性的,因为您通常不希望在单元测试的主体内写入文件。但我们的想法是,您可以在经过长时间运行后调用done
。