модульный тест node.js мангуста мокко чай синон - PullRequest
0 голосов
/ 26 мая 2018

Я новичок в модульном тестировании.Мой Web API проект основан на MVC на node-express-mongoose.

У меня есть conroller.js, как указано ниже:

const getComments = async (req, res) => {
  let query = {};

  try {
    query = req.query.filter ? { email: new RegExp(`.*${req.query.filter}.*`, 'i') } : query;
    const comments = await util.getComments(query);
    return res.json(comments);
  } catch (err) {
    return res.status(500).send(`Internal server error: ${err}`);
  }
};

Контроллер использует util.js функцию (и), которая реализуетвсе операции с базой данных:

const comments = require('../models/comments');

exports.getComments = (query) => {
      try {
        return comments.find(query).sort({ createdAt: -1 });
      } catch (err) {
        throw err;
      }
};

Как мне создать модульный тест, используя mocha & chai?Нужно ли создавать поддельные макеты, используя sinon и т. Д.

1 Ответ

0 голосов
/ 26 мая 2018

Если я хочу написать тест по методу, которого невозможно избежать без насмешек над БД, я использую mongodb-memory-server , который действует как база данных и имитирует поведение mongodb.

const Comment = require('../models/comments');

const mockedComments = [ // modify example data depending on Your model
  {userId: "1", body: "Mocked comment of user 1", createdAt: Date.now() },
  {userId: "2", body: "Mocked comment of user 2", createdAt: Date.now() },
];

const getComments = require('../path/to/getComments');


const mongoose = require('mongoose');
const MongodbMemoryServer = require('mongodb-memory-server');

let mongoServer;
const opts = { useMongoClient: true }; 

before((done) => {
  mongoServer = new MongodbMemoryServer();

  mongoServer.getConnectionString()
    .then((mongoUri) => {
      return mongoose.connect(mongoUri, opts, (err) => {
        if (err) done(err);
      });
    })
    .then(() => {
     // preparing in memory database contents 
     Promise.all([
       Comment.create(mockedComments[0]),
       Comment.create(mockedComments[1])
     ]).then(() => done());
    });
});

after(() => {
  mongoose.disconnect();
  mongoServer.stop();
});

describe('getComments', () => {

  it('successfully returns comments', async () => {
    const result = await getComments({});
    expect(result.length).to.equal(mockedComments.length);
  });

  it('successfully returns comments of user', async () => {
    const result = await getComments({userId: 1});
    expect(result[0].userId).to.equal(1);
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...