Заглушка Sinonjs не заменяет метод - PullRequest
0 голосов
/ 09 марта 2019

На основании примера я пытаюсь заглушить функцию БД. Но я получаю «ReferenceError: База данных не определена». Не уверен, почему заглушка не работает! Пожалуйста, помогите!

Ниже мой код для тестирования -

module.exports = {
   getName : function(name){
       console.log(name);
   },
   setupNewUser : function(info, callback) {
        var user = {
          name: info.name,
          nameUpperCase: info.name.toUpperCase()
        };
        console.log(user.name,user.nameUpperCase)
        try {
          Database.save(user, callback);
        }
        catch(err) {
          callback(err);
        }
      }
}

Ниже мой тест -

const expect = require('chai').expect;
const sinon = require('sinon');
const crypto = require('../crypto/crypto');

  describe("test crypto module",function(){
       it("should pass object with correct values to save",function(){
        console.log("save");
        var save = sinon.stub(Database, 'save');
        
        var info = { name: 'test' };
        var expectedUser = {
            name: info.name,
            nameUpperCase: info.name.toUpperCase()
        };

        crypto.setupNewUser(info, function() { });
        sinon.assert.calledWith(save, expectedUser);
        save.restore();


    })
})

1 Ответ

0 голосов
/ 09 марта 2019

Чтобы эта строка вашего теста работала, вам также необходимо определить Database в коде теста:

var save = sinon.stub(Database, 'save');

Ваш оригинальный фрагмент кода не показывает, как Databaseопределены там.Если это результат вызова require, вам может потребоваться просто добавить эквивалентный require к вашему тестовому коду (из-за того, как работает кэш модуля узла):

const Database = require('../path/to/my/db/module');

В качестве альтернативы, еслипроисходит что-то более сложное, например, как результат вызова какой-либо функции, вам может понадобиться внедрить его, используя что-то вроде proxyquire, чтобы функция возвращала вашу копию.Но вам нужно показать нам определение Database в вашем коде, чтобы знать это наверняка.

...