Перемещение мой комментарий выше ответ здесь:
Глядя на ваш код, я просто не уверен, что this
ссылка относится к И, основываясь на сообщении об ошибке, похоже, его отношение к. . что-то в контексте Поэтому я хотел бы попробовать что-то вроде этого:
var patientController;
beforeEach(function() {
patientController = new PatientController({model: new Backbone.Model(PatientModel)});
});
it('executes this.initializePatientEvents', function() {
let spy = chai.spy.on(patientController, 'initializePatientEvents');
expect(spy).to.have.been.called();
});
Если это не работает, то его более конкретно к вашей реализации patientController
и метода initializePatientEvents
, а не то, что связано с Chai. шпион.
EDIT: Вот что я создал локально, и мне удалось пройти тест. Основное отличие состоит в том, что вместо использования Backbone я просто создал свою собственную конструкторскую функцию.
"use strict";
var chai = require("chai");
var sinon = require("sinon");
var sinonChai = require("sinon-chai");
chai.use(sinonChai);
var expect = chai.expect;
var should = chai.should();
describe("PatientController Test", function() {
var PatientController;
var initializePatientEventsSpy;
var patient;
beforeEach(function() {
PatientController = function(name, age) {
this.name = name;
this.age = age;
this.initializePatientEvents();
};
PatientController.prototype.initializePatientEvents = function() {
console.log("Do some initialization stuff here");
};
initializePatientEventsSpy = sinon.spy(PatientController.prototype, "initializePatientEvents");
});
it("should test initializePatientEvents was called", function() {
patient = new PatientController("Willson", 30);
initializePatientEventsSpy.should.have.been.called;
});
});
Не уверен, что это связано, а что означает 'this' в пределах анонимной функции внутри beforeEach? Обычно, когда я выполняю модульное тестирование, я буду определять переменные за пределами beforeEach, а затем присваивать им их значения в пределах beforeEach. Попробуйте объявить переменную 'patientController' за пределами beforeEach и затем назначить новый объект PatientController в пределах beforeEach. – wmock
Вы говорите, что используете patientController, а не this.patientController? – devwannabe
1) 'beforeEach',' describe' и 'it' являются функциями вашей тестовой среды (мокка/жасмин/синус), поэтому ваш вопрос не имеет никакого смысла. 2) Даже если 'beforeEach' запущен, это до того, как вы зарегистрировали шпиона, чтобы ваш initializePatientEvents, вероятно, бежал от своего конструктора (до регистрации шпиона). Вам нужен способ вызвать initializePatientEvents, потому что вы ничего не делаете, чтобы вызвать его в своем тесте. – cchamberlain