【问题标题】:Coffeescript calling function inside jQuery docment.readyjQuery document.ready 中的 Coffeescript 调用函数
【发布时间】:2011-12-10 12:51:04
【问题描述】:

茉莉花测试:

describe 'Toolbar', ->
  beforeEach ->
    jasmine.getFixtures().fixturesPath = "../spec/javascript/fixtures"
    loadFixtures("canvas_fixture.html")

  describe 'Rectangle Button Click', ->
    it 'adds the selected class to rectangle button', ->
      toolbar = new Toolbar()
      expect(toolbar).toBeDefined
      console.log $('#rectangle')
      toolbar.rectangle
      expect($('#rectangle').hasClass("selected")).toBeTruthy()
      console.log $('#rectangle')

类:

class window.Toolbar
  jQuery ->
    rectangle: $('#rectangle').click ->
      $('#toolbar button').removeClass("selected")
      $('#rectangle').addClass("selected")

这个测试对我来说失败了,因为选定的类没有被添加到夹具中,而且我认为我没有正确调用该函数。我怎么称呼

$('#rectangle').click

在我的测试中起作用?谢谢。

【问题讨论】:

  • 首先查看生成的 JavaScript。

标签: jquery testing coffeescript jasmine


【解决方案1】:

我不知道整个上下文,但我看到了一些东西:

  • toolbar.rectangle 在你的测试中没有调用函数,你需要说toolbar.rectangle() 才能真正调用它
  • 您编写的类没有在 Toolbar 类上定义方法,您应该编写如下内容:

    class Toolbar
      rectangle: ->
        $('#rectangle').click ->
          $('#toolbar button').removeClass("selected")
          $('#rectangle').addClass("selected")
    
  • 当您编写此$('#rectangle').click -> ... 时,您正在定义一个事件处理程序,当您单击#rectangle 时将调用该事件处理程序。如果你想让它立即采取行动(即当你打电话给toolbar.rectangle(),你需要这样的东西:

    class Toolbar
      rectangle: ->
        $('#toolbar button').removeClass("selected")
        $('#rectangle').addClass("selected")
    

当然,你需要确保这一切都发生在页面正确加载之后,不熟悉 Jasmine 的说是否会发生。

希望这会有所帮助。

【讨论】:

  • 感谢您的信息。这很有帮助。我希望以前使用过jasmine的人也可以添加一些信息,因为即使我使用toolbar.rectangle(),我仍然无法在测试中调用rectangle方法
  • 刚刚下载了 Jasmine,按照上面的规范做了一个规范,请到这里查看适合我的完整测试(在浏览器中,而不是从本地文件系统):github.com/icyrockcom/so7815109-jasmine-coffeescript
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
相关资源
最近更新 更多