2017-01-16 115 views
0

我正在寻找创建一些具有异步功能的代码茉莉花规格。茉莉花async测试没有settimeout

在茉莉文档它显示了例子:

it("takes a long time", function(done) { 
      setTimeout(function() { 
      done(); 
      }, 9000); 
     }); 

使用进行功能和setTimeout的,我的这个问题是setTimout可能是脆弱的,即延迟测试中enviros运行

有这种测试的替代解决方案,我不必使用超时?

预先感谢

+0

如何计算异步函数的结果 - 通过回调,承诺还是等待? –

+0

看看[jasmine-co](https://www.npmjs.com/package/jasmine-co)。使用这个npm包,你可以使用'yield'和drop'setTimeout()'和'done()'。 – jengeb

回答

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() });

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