ruby-on-rails-3.1之使用 Jasmine 监视 Javascript 构造函数

mengfanrong 阅读:14 2024-11-24 20:56:43 评论:0

我正在为一些 Javascript 类(backbone.js View ,用 Coffeescript 编写)编写规范,我想确保一个 View 构建另一个 View 。

我试图通过监视构造函数来做到这一点,就像这样:

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() 

AviaView 上的 initialize() 调用肯定会导致调用 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() 


标签:JavaScript
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号