Слежка за конструктором Javascript с помощью Jasmine
-
25-10-2019 - |
Вопрос
Я пишу спецификации для некоторых классов Javascript (backbone.js views, написанные на Coffeescript), и я хотел бы убедиться, что одно представление создает другое.
Я пытаюсь сделать это, шпионя за конструктором, вот так:
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()
Тот Самый initialize()
вызов AviaView определенно вызывает вызов конструктора MatricesView, любезно предоставленного в этой строке:
new Avia.MatricesView($("#tabs-3")).initialize()
Это определенно работает;если я запускаю приложение вручную, я вижу, что конструктор вызывается во время initialize()
.Однако моя спецификация Jasmine терпит неудачу:
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.
Я поговорил с несколькими моими коллегами, и они согласны с тем, что это следует работать ...кто-нибудь может предложить хороший способ слежки за конструкторами?
Решение
Как насчет:
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()
Не связан с StackOverflow