Pregunta

Estoy escribiendo especificaciones para algunas clases de JavaScript (vistas de Backbone.js, escritas en CoffeeScript) y me gustaría asegurarme de que una vista construya otra.

Estoy intentando hacer esto espiando al constructor, como así:

describe 'Avia.AviaView', ->

  beforeEach ->
    @aviaView = new Avia.AviaView()
    @matricesView = new Backbone.View()
    spyOn(Avia.MatricesView, 'constructor').andReturn @matricesView

  describe 'initialize', ->

    beforeEach ->
      @aviaView.initialize()

    it 'creates a new MatricesView ', ->
      expect(Avia.MatricesView.constructor).toHaveBeenCalledOnce()

los initialize() Llame en Aviaview definitivamente hace que el constructor MatricesView se llame, cortesía de esta línea:

new Avia.MatricesView($("#tabs-3")).initialize()

Definitivamente funciona; Si ejecuto la aplicación manualmente, puedo ver que el constructor se llama durante initialize(). Sin embargo, mi especificación de jazmín falla:

Running Jasmine specs...
F

Avia.AviaView initialize creates a new MatricesView . (/Users/dev/avia/spec/javascripts/views/avia_view_spec.js.coffee:13)
  Expected constructor to be called exactly once, but was called '0' times (line ~14)
    expect(Avia.MatricesView.constructor).toHaveBeenCalledOnce();

FAIL: 1 test, 1 failure, 0.008 secs.

He hablado con varios de mis colegas, y ellos están de acuerdo en que esto debería Trabajar ... ¿Alguien puede sugerir una buena forma de espiar a los constructores?

¿Fue útil?

Solución

Qué tal si:

describe 'Avia.AviaView', ->

  beforeEach ->
    @aviaView = new Avia.AviaView()
    @matricesView = new Backbone.View()
    spyOn(Avia, 'MatricesView').andReturn @matricesView

  describe 'initialize', ->

    beforeEach ->
      @aviaView.initialize()

    it 'creates a new MatricesView ', ->
      expect(Avia.MatricesView).toHaveBeenCalledOnce()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top