Spiare un costruttore Javascript utilizzando Jasmine
-
25-10-2019 - |
Domanda
Sto scrivendo specifiche per alcune classi Javascript (vista backbone.js, scritti in CoffeeScript) e mi piacerebbe far sì che un punto di vista costruisce un altro.
Sto cercando di farlo spiare il costruttore, in questo modo:
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()
La chiamata initialize()
su AviaView provoca sicuramente il costruttore MatricesView di essere chiamato, per gentile concessione di questa linea:
new Avia.MatricesView($("#tabs-3")).initialize()
E 'sicuramente funziona; se corro l'applicazione manualmente posso vedere il costruttore viene chiamato durante initialize()
. Tuttavia la mia spec Jasmine fallisce:
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.
Ho parlato con molti dei miei colleghi, e sono d'accordo che questo dovrebbe il lavoro ... Qualcuno può suggerire un buon modo di spiare costruttori?
Soluzione
Come su:
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()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow