我正在尝试为我的API构建测试集,该测试集是使用nodejs / express与mocha / chai一起开发的。基本上,索引返回一个我知道它正常工作的简单字符串,因为我可以在浏览器上看到:
router.get('/', function(req, res, next) {
res.send('Hello World from Eclipse');
});
然后我按照tutorial来构建此测试:
var supertest = require("supertest");
var should = require("should");
// This agent refers to PORT where program is runninng.
var server = supertest.agent("http://localhost:5000");
// UNIT test begin
describe("SAMPLE unit test",function(){
// #1 should return home page
it("should return home page",function(done){
// calling home page api
server
.get("/")
.expect("Content-type",/json/)
.expect(200) // THis is HTTP response
.end(function(err,res){
// HTTP status should be 200
res.status.should.equal(200);
// Error key should be false.
res.body.error.should.equal(false);
done();
});
});
});
我可以在我的服务器的日志中看到该地址已被调用,但是,测试总是说它无法读取属性'应该'未定义的,在我所拥有的行#res ;status.should.equal(200);'。可能是因为' res'未定义。换句话说,API没有答案。
我在这里遗漏了什么吗?我运行没有参数的摩卡......
答案 0 :(得分:1)
尝试这样的事情:
var expect = require('chai').expect;
var request = require('supertest');
var uri = 'your url';
describe('Profile',function(){
it('Should return a users profile',function(done){
request
.get(uri + '/api/1.0/profile')
.query({app_id:'12345'})
.end(function(err,res){
var body = res.body;
expect(body.first_name).to.equal('Bob');
expect(body.last_name).to.equal('Smith');
done()
});
});
});
确保包含正确的要求。
答案 1 :(得分:0)
您应该检查.end()
中的错误:
.end(function(err, res) {
if (err) return done(err);
...
});
测试用例期望内容类型与/json/
不匹配,因此它应该被设置(并且res
将因此而未定义。)