ジャスミンを使用したJavaScriptコンストラクターをスパイします
-
25-10-2019 - |
質問
私はいくつかのJavaScriptクラス(backbone.jsビュー、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()
. 。しかし、私のジャスミンの仕様は失敗します:
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