Как тестировать паруса, встроенные в модельные методы? - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть модель с именем User in sails. Предположим, у меня есть следующий контроллер:

module.exports = {

    register: async function(req, res) {

        var record = await User.create({
            username: 'kevin chuka'
        });

    }

};

Я хочу заглушить User.create (), чтобы вернуть true в тесте. ВАЖНОЕ ПРИМЕЧАНИЕ: поднимать паруса перед тестом не вариант, потому что в этом случае это не будет модульный тест, а при поднятии парусов он будет перепутан с большинством других тестов, которые я проводил. написано.

1 Ответ

0 голосов
/ 14 февраля 2020

Вот решение для модульного тестирования:

controller.js:

const User = require('./user');

module.exports = {
  register: async function(req, res) {
    var record = await User.create({
      username: 'kevin chuka',
    });
    return record;
  },
};

user.js:

class User {
  static async create() {
    return 'real user';
  }
}

module.exports = User;

controller.test.js:

const sinon = require('sinon');
const User = require('./user');
const controller = require('./controller');
const { expect } = require('chai');
describe('60220190', () => {
  it('should create and return user', async () => {
    sinon.stub(User, 'create').resolves(true);
    const actual = await controller.register();
    expect(actual).to.be.eq(true);
    sinon.assert.calledWithExactly(User.create, { username: 'kevin chuka' });
  });
});

Результаты модульных испытаний с отчетом о покрытии:

 60220190
    ✓ should create and return user


  1 passing (29ms)

---------------|---------|----------|---------|---------|-------------------
File           | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
---------------|---------|----------|---------|---------|-------------------
All files      |   83.33 |      100 |      50 |   83.33 |                   
 controller.js |     100 |      100 |     100 |     100 |                   
 user.js       |      50 |      100 |       0 |      50 | 3                 
---------------|---------|----------|---------|---------|-------------------
...