没有settimeout的Jasmine异步测试

时间:2017-01-16 16:01:05

标签: javascript unit-testing jasmine

我希望为一段具有异步功能的代码创建一些茉莉花规格。

在茉莉花文档中,它显示了示例:

bar()

使用done函数和setTimeout,我的问题是setTimout可能很脆弱,即在enviros中测试运行的延迟

是否有替代解决方案来进行此类测试,我不必使用超时?

提前致谢

2 个答案:

答案 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