Unit Test Mocking REST API mon goose запросов с использованием node-mocks-http, sinon, mocha и chai - PullRequest
0 голосов
/ 07 апреля 2020

Я новичок в 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"}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...