Я новичок в node.js тестировании. Мне нужно выполнить модульное тестирование кода моего контроллера, который содержит mon goose запросов find, findOne внутри REST API. Я не хочу использовать mock goose или mongodb-in-memory-server. Мне нужно кодировать только используя chai, mocha, sinon и nock-mock-http. Есть ли простой способ для модульного тестирования моего кода с использованием заглушек sinon? когда я запускаю Стамбул для покрытия кода, код не может go внутри функции find и findOne. Пожалуйста, объясните с кодом, как я новичок в этом topi c.
test. js
const app = require("../app");
const chai = require("chai");
var should = chai.should();
const sinon = require('sinon');
const userAccount = app.use(require('../controller/users'));
const Model = require('../model/detail.model');
var httpMocks = require('node-mocks-http');
describe(' Testing User APIs', function(){
it('should get the details from mongo atlas',function(done){
var req = httpMocks.createRequest({
method:'GET',
url: '/userAcc',
body: {}
});
var res = httpMocks.createResponse({
eventEmitter:require('events').EventEmitter
});
userAccount(req,res);
res.on('end',function(){
res.statusCode.should.be.equal(200);
});
done();
})
it('should get the user from mongo atlas',function(done){
var req = httpMocks.createRequest({
method:'GET',
url: '/search',
body: {}
});
var res = httpMocks.createResponse({
eventEmitter:require('events').EventEmitter
});
userAccount(req,res);
res.on('end',function(){
res.statusCode.should.be.equal(200);
});
done();
})});
контроллер / пользователи. js
const AccModel = mongooseClient.model('mydetail', mySchema);
router.get('/userAcc', (req, res) => {
AccModel.find((err, acc) => {
if (err) {
console.log('Error! Cannot fetch details from db');
} else {
res.send(acc);
}
})
router.get('/search', (req, res) => {
AccModel.findOne({
Name: "Emily"}, (err, result) => {
if (err) {
console.log('Search Failed');
} else {
res.send(result);
}
})
});
})
module.exports = router;
Мой ответ от mongodb Atlas для поиска Query возвращает массив, который я хочу проверить:
[{"name": "data", "email": "data"}] для findOne Query, возвращаемый объект: {"name": "data", "email": "data"}