我正在使用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的任何帮助都将不胜感激。
答案 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()
})
})
})
对于上面的示例代码,您需要request
和should
模块
npm install --save-dev request should