使用jasmine和node.js测试Web API

时间:2011-10-17 11:02:43

标签: node.js jasmine

我们编写了一个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);
    });
  });
});

我们很感激有关替代测试框架或同步请求客户端的任何提示。

2 个答案:

答案 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一起使用。

但是,我认为更好的方法可能是使用API​​easy,它显然建立在vows上。有awesome article over at nodejitsu that explains how to use it

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