2015-11-21 4 views
1

Пожалуйста, не предлагайте использовать Sinon. Я хочу, чтобы chai-spies специально chai.spy.on работал с вашей помощью. В принципе, у меня есть эта спецификация. Внутри моего метода инициализации в PatientController я вызываю this.initializePatientEvents();Не удается получить chai.spy.on для работы

beforeEach(function() { 
    this.patientController = new PatientController({model: new Backbone.Model(PatientModel)}); 
}); 

it('executes this.initializePatientEvents', function() { 
    let spy = chai.spy.on(this.patientController, 'initializePatientEvents'); 
    expect(spy).to.have.been.called(); 
}); 

Однако тест терпит неудачу с этой ошибкой

AssertionError: expected { Spy } to have been called 
at Context.<anonymous> 

я провел почти 3 часа теперь не повезло! :(

+0

Не уверен, что это связано, а что означает 'this' в пределах анонимной функции внутри beforeEach? Обычно, когда я выполняю модульное тестирование, я буду определять переменные за пределами beforeEach, а затем присваивать им их значения в пределах beforeEach. Попробуйте объявить переменную 'patientController' за пределами beforeEach и затем назначить новый объект PatientController в пределах beforeEach. – wmock

+0

Вы говорите, что используете patientController, а не this.patientController? – devwannabe

+0

1) 'beforeEach',' describe' и 'it' являются функциями вашей тестовой среды (мокка/жасмин/синус), поэтому ваш вопрос не имеет никакого смысла. 2) Даже если 'beforeEach' запущен, это до того, как вы зарегистрировали шпиона, чтобы ваш initializePatientEvents, вероятно, бежал от своего конструктора (до регистрации шпиона). Вам нужен способ вызвать initializePatientEvents, потому что вы ничего не делаете, чтобы вызвать его в своем тесте. – cchamberlain

ответ

1

Перемещение мой комментарий выше ответ здесь:

Глядя на ваш код, я просто не уверен, что 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; 
    }); 
}); 
+0

Да, это то, что я пробовал и все еще не работал. Возможно, мне придется устранить неисправность моего контроллера. Большое спасибо! – devwannabe

+0

Возможно, я неправильно понимаю процесс. Правильно ли, что 2-й параметр должен указывать на регулярную функцию, определенную в контексте, в данном случае это patientController? Я надеюсь, что кто-то может предоставить рабочий jsfiddle или даже быстрый код в github, который имеет chai-шпионов. – devwannabe

+0

Теперь посмотрим. Благодаря! – devwannabe

Смежные вопросы