我正在为某些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肯定会导致矩阵view构造函数称为此行:

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()
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top