您好我正在尝试运行mocha和chai测试来测试我的节点js路由器,它将用户保存在mysql数据库中,然后返回相同的数组。
我目前面临的问题是,当我从本地运行时,我不想将信息保存在数据库中,当我使用像travis / Ci这样的连续集成软件时,测试失败,因为没有数据库连接。我想知道如何使用当前测试数据库保存而不实际保存到数据库。
基本上意味着有一个假的虚拟数据库来保存或返回保存。
我读到sinon.js可以提供帮助,但我不确定如何使用它。
这是我的代码
var expect = require('chai').expect;
var faker = require('faker');
const request = require('supertest');
const should = require('should');
const sinon = require('sinon');
const helper = require('../../models/user');
describe('POST /saveUser',()=>{
it('should save a new user',(done)=>{
var fake =
request(app)
.post('/saveUser')
.send({
Owner : faker.random.number(),
firstname : faker.name.firstName(),
lastname : faker.name.lastName(),
email:faker.internet.email(),
password : faker.random.number(),
token : faker.random.uuid()
})
.expect(200)
.expect((res)=>{
expect(res.body.firstname).to.be.a("string");
expect(res.body.lastname).to.be.a("string");
expect(res.body.Owner).to.be.a("number");
})
.end(done);
});
});
这是路由器
router.post('/saveUser',(req,res,next)=>{
saveUser(req.body).then((result)=>{
return res.send(req.body);
}).catch((e)=>{
return res.send('All info not saved');
});
});
这是模型
saveUser = (userinfo) => new Promise((resolve,reject)=>{
db.query('INSERT INTO user SET ?',userinfo,function(error,results,fields){
if(error){
reject();
}else{
resolve(userinfo);
}
})
});
答案 0 :(得分:0)
你所描述的是一个存根。使用sinon,您可以使用存根方法并调用伪方法,如下所示:
sinon.stub(/* module that implements saveUser */, 'saveUser').callsFake(() => Promise.resolve());