Как перехватить мою функцию mongoose save в функции, которую я пытаюсь проверить? [Дубликат]

Это работает нормально:

        <button onclick="location.href='mailto:em@i.l';">send mail</button>
8
задан Community 23 May 2017 в 12:09
поделиться

2 ответа

Вот окончательная конфигурация, которую я разработал, которая использует комбинацию синонов и насмешек:

// Dependencies
var expect = require('chai').expect;
var sinon = require('sinon');
var mockery = require('mockery');
var reloadStub = require('../../../spec/utils/reloadStub');

describe('UNIT: userController.js', function() {

  var reportErrorStub;
  var controller;
  var userModel;

  before(function() {
    // mock the error reporter
    mockery.enable({
      warnOnReplace: false,
      warnOnUnregistered: false,
      useCleanCache: true
    });

    // load controller and model
    controller = require('./userController');
    userModel = require('./userModel');
  });

  after(function() {
    // disable mock after tests complete
    mockery.disable();
  });

  describe('#createUser', function() {
    var req;
    var res;
    var status;
    var end;
    var json;

    // Stub `#save` for all these tests
    before(function() {
      sinon.stub(userModel.prototype, 'save');
    });

    // Stub out req and res
    beforeEach(function() {
      req = {
        body: {
          username: 'Andrew',
          userID: 1
        }
      };

      status = sinon.stub();
      end = sinon.stub();
      json = sinon.stub();

      res = { status: status.returns({ end: end, json: json }) };
    });

    // Reset call count after each test
    afterEach(function() {
      userModel.prototype.save.reset();
    });

    // Restore after all tests finish
    after(function() {
      userModel.prototype.save.restore();
    });

    it('should call `User.save`', function(done) {
      controller.createUser(req, res);
      /**
       * Since Mongoose's `new` is asynchronous, run our expectations on the
       * next cycle of the event loop.
       */
      setTimeout(function() {
        expect(userModel.prototype.save.callCount).to.equal(1);
        done();
      }, 0);
    });
  }
}
4
ответ дан AndrewSouthpaw 15 August 2018 в 14:54
поделиться
  • 1
    Это сработало для меня! Большое спасибо за обмен! & Lt; 3 – Yavor Kirov 24 February 2017 в 08:26

Вы пробовали:

sinon.stub(userModel.prototype, 'save')

Также, где функция-помощник вызывается в тесте? Похоже, вы определяете функцию как модуль utils, но называете ее как метод объекта контроллера. Я предполагаю, что это не имеет ничего общего с этим сообщением об ошибке, но это затрудняло определение того, когда и где был вызван заглушка.

1
ответ дан user4529534 15 August 2018 в 14:54
поделиться
  • 1
    Спасибо за ответ. Спасибо за уловку. Разница в определении функции в качестве модуля и последующем ее вызове в качестве метода была ошибкой, возникающей при очистке кода и упрощении его для SO. Я исправил это сейчас. – AndrewSouthpaw 5 March 2015 в 19:05
  • 2
    Я попытался использовать sinon.stub(userModel.prototype, 'save'). Он точно фиксирует поведение по методу save, но он все еще бросает ранее описанный TypeError. – AndrewSouthpaw 5 March 2015 в 19:32
Другие вопросы по тегам:

Похожие вопросы: