使用jasmine和node.jstestingweb API

我们编写了一个RESTful Web API,它使用node.js响应GET和PUT请求。 我们在testingAPI时遇到一些困难。 首先,我们使用了Zombie.js ,但没有很好的logging,所以我们无法得到PUT请求:

var zombie = require("zombie"); describe("description", function() { it("description", function() { zombie.visit("http://localhost:3000/", function (err, browser, status) { expect(browser.text).toEqual("A") }); }); }); 

之后,我们尝试使用一个名为restler的REST客户端,这可以,因为我们不需要任何高级的浏览器模拟。 这是因为请求似乎是asynchronous的,即testing是无用的,因为它在调用“成功”callback之前完成了:

 var rest = require('restler'); describe("description", function() { it("description", function() { rest.get("http://www.google.com").on('complete', function(data, response) { // Should fail expect(data).toMatch(/apa/i); }); }); }); 

我们将感谢有关替代testing框架或同步请求客户端的任何提示。

我很好奇,所以我做了更多的研究。 除了僵尸 ,你有几个select…

你可以像这个人一样使用http库。

不过,我认为更好的方法可能是使用API​​easy,这显然是build立在誓言上 。 在nodejitsu上有一篇很棒的文章解释了如何使用它 。

另一个有趣的想法是使用expresso,如果你使用快递。

对于节点,来自Misko Hevery的茉莉花节点具有asynchronous支持并包装茉莉花。

https://github.com/mhevery/jasmine-node

给testing签名添加一个“完成”参数,并在asynchronous调用完成时调用该参数。 您也可以自定义超时(默认值是500毫秒)。

例如从Github自述文件

 it("should respond with hello world", function(done) { request("http://localhost:3000/hello", function(error, response, body){ done(); }, 250); // timeout after 250 ms }); 

茉莉花普通也支持asynchronoustesting运行和等待,或可以使用Jasmine.Async的'完成'。