Прежде всего, если ManagerDao.initFindOpenCases
является методом экземпляра (я не уверен, так как вы не поделились его определением), то вы не можете заглушить его в конструкторе, как вы сделали здесь:
let findOpenCases = this.sandbox.stub(ManagerDao, "findOpenCases")
Вам нужно сначала создать экземпляр - затем заглушить его в этом экземпляре - или поставить заглушку на самом прототипе так:
let findOpenCases = this.sandbox.stub(ManagerDao.prototype, "findOpenCases");
Во-вторых, вы делаете то же самоеснова ошибка в вашем утверждении в сочетании с другим:
sinon.assert.calledWith(ManagerDaoStub.initFindOpenCases, DEVICE_ID, KEY, null)
ManagerDaoStub
является конструктором, и у него нет свойства initFindOpenCases
.Его прототип делает, и таким образом его экземпляры делают то же самое.Кроме того, ManagerDaoStub.prototype.initFindOpenCases
это все еще не заглушка.Это метод, который вы вызываете для создания заглушки, но сам по себе он не является заглушкой.Проще говоря, вы смешиваете ManagerDao
с ManagerDaoStub
.
Если вы сделаете пример изменения выше, вы можете заставить свое утверждение работать так:
sinon.assert.calledWith(ManagerDao.prototype.initFindOpenCases, DEVICE_ID, KEY, null)
Однако , это не все, что я бы рекомендовал изменить.Эта последняя путаница возникает в основном потому, что вы значительно усложняете код настройки вашего теста.Вам не нужно создавать целый класс, чтобы заглушить один метод ManagerDao.
Вместо этого просто замените ваши before
и after
вызовы следующими:
beforeEach(() => {
// Create the stub on the prototype.
sinon.stub(ManagerDao.prototype, 'findOpenCases')
.withArgs(DEVICE_ID, KEY, sinon.match.func)
.callsArgWith(2, newError('Test Error'));
});
afterEach(() => {
// As of sinon 5.0.0, the sinon object *is* a sandbox, so you can
// easily restore every fake you've made like so:
sinon.restore();
});
Помимопоэтому я рекомендую глубоко изучить разницу между свойствами конструктора и свойствами его прототипа.Это знание сделает такие вещи намного проще для вас.Лучшее место для начала, вероятно, здесь, на MDN .