【发布时间】:2017-02-06 10:15:33
【问题描述】:
嗨,我想对我的 express js 代码进行单元测试,我想模拟数据,所以在搜索了多个网站和博客后,我找到了 this 库,但我不清楚如何使用这个库来模拟或数据。 我的测试代码是
var request = require('supertest');
var server = require('./app');
var chai = require('chai');
var chaiHttp = require('chai-http');
var server = require('./app');
var should = chai.should();
chai.use(chaiHttp);
describe('loading express', function () {
it('responds to /', function testSlash(done) {
request(server)
.get('/')
.expect(200, done);
});
it('404 everything else', function testPath(done) {
request(server)
.get('/foo/bar')
.expect(404, done);
});
it('responds to /customers/getCustomerData', function testPath(done) {
request(server)
.get('/customers/getCustomerData?id=0987654321')
.end(function(err, res){
res.should.have.status(200);
res.body.should.be.a('object');
res.body.status.should.equal("success");
res.body.data.customerId.should.equal("0987654321");
done();
});
});
});
目前此代码正在从数据库中获取数据,但我希望使用模拟数据进行单元测试。我怎样才能做到这一点?
__EDIT__
我想测试写在 Express js 路由文件中的代码。我在像这样的 app.js 文件中调用这条路线
var customers = require('./routes/customers');
app.use('/customers', customers);
现在 customers route 文件包含的代码是
function getCustomerData(req, res, next) {
var response = {};
var cb = function (response) {
res.send(response);
}
var modelObj = req.models.customer_master;
var data = req.query;
controllers.customers.get(modelObj, data, cb);
};
router.get('/getCustomerData', function (req, res, next) {
getCustomerData(req, res, next);
});
我想使用模拟数据测试“get”方法的响应
【问题讨论】:
-
您可以使用 passthrough() 模拟响应,例如 var response=new passthrough() 但由于您使用的是 supertest,您可以检查我的答案,其中包含您要求的测试文件。查看日期,您可能已经找到了解决方案,但是,如果有帮助,请告诉我。
标签: node.js unit-testing express sinon sinon-chai