使用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库。
不过,我认为更好的方法可能是使用APIeasy,这显然是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的'完成'。