我们编写了一个RESTful Web API,它使用node.js响应GET和PUT请求。 我们在测试API时遇到了一些困难。 首先,我们使用Zombie.js,但它没有很好地记录,所以我们无法让它来发出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客户端,这没问题,因为我们不需要任何高级浏览器模拟。由于请求似乎是异步的,因此测试失败,因为它在调用'on success'回调之前完成,因此失败:
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);
});
});
});
我们很感激有关替代测试框架或同步请求客户端的任何提示。
答案 0 :(得分:4)
对于节点,来自Misko Hevery的jasmine-node具有异步支持并包装jasmine。
https://github.com/mhevery/jasmine-node
将“done”参数添加到测试签名中,并在异步调用完成时调用该参数。您还可以自定义超时(默认值为500毫秒)。
e.g。来自Github README
it("should respond with hello world", function(done) {
request("http://localhost:3000/hello", function(error, response, body){
done();
}, 250); // timeout after 250 ms
});
jasmine regular还支持使用runs和waitForFor进行异步测试,或者可以使用Jasmine.Async进行“完成”。
答案 1 :(得分:3)
我很好奇,所以我做了一些研究。除了zombie之外,你还有几个选择...
您可以将vows与http库like this guy一起使用。
但是,我认为更好的方法可能是使用APIeasy,它显然建立在vows上。有awesome article over at nodejitsu that explains how to use it。
另一个有趣的想法是,如果您使用快递,则使用expresso。