通过Zombie.js浏览器使用POST方法调用API

时间:2013-05-24 06:43:48

标签: node.js testing post browser zombie.js

我正在使用Zombie.js测试我的node.js代码。我有以下api,它在POST方法中:

/api/names

并在我的test / person.js文件中输入以下代码:

it('Test Retreiving Names Via Browser', function(done){
    this.timeout(10000);
    var url = host + "/api/names";
    var browser = new zombie.Browser();
    browser.visit(url, function(err, _browser, status){
       if(browser.error)
       {
           console.log("Invalid url!!! " + url);
       }
       else
       {
           console.log("Valid url!!!" + ". Status " + status);
       }
       done();
    });
});

现在,当我从终端执行命令 mocha 时,它会进入 browser.error 条件。但是,如果我将API设置为get方法,它会按预期工作并进入有效网址(其他部分)。我想这是因为在post方法中使用了我的API。

PS:我没有创建任何表单来执行按钮点击查询,因为我正在为移动设备开发后端。

有关如何使用POST方法执行API的任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

Zombie更多地用于与实际网页进行交互,并且在帖子请求实际表单的情况下。

对于您的测试,请使用request模块并自行手动制作帖子请求

var request = require('request')
var should = require('should')
describe('URL names', function () {
  it('Should give error on invalid url', function(done) {
    // assume the following url is invalid
    var url = 'http://localhost:5000/api/names'
    var opts = {
      url: url,
      method: 'post'
    }
    request(opts, function (err, res, body) {
      // you will need to customize the assertions below based on your server

      // if server returns an actual error
      should.exist(err)
      // maybe you want to check the status code
      res.statusCode.should.eql(404, 'wrong status code returned from server')
      done()
    })
  })

  it('Should not give error on valid url', function(done) {
    // assume the following url is valid
    var url = 'http://localhost:5000/api/foo'
    var opts = {
      url: url,
      method: 'post'
    }
    request(opts, function (err, res, body) {
      // you will need to customize the assertions below based on your server

      // if server returns an actual error
      should.not.exist(err)
      // maybe you want to check the status code
      res.statusCode.should.eql(200, 'wrong status code returned from server')
      done()
    })
  })
})

对于上面的示例代码,您需要requestshould模块

npm install --save-dev request should