【问题标题】:ReferenceError: CoffeeScript + JsTestDriver + Qunit参考错误:CoffeeScript + JsTestDriver + Qunit
【发布时间】:2011-06-06 02:08:40
【问题描述】:

目前我正在使用 CoffeeScript 和 JsTestDriver 研究 TDD,但是我遇到了 JsTestDriver 抛出的 ReferenceError。

一些信息:

配置

server: http://Mark-PC:9876/capture

load:
  - js/lib/main/*.js
  - js/lib/test/sinon.js
  - js/lib/test/qunit.js
  - js/lib/test/equiv.js
  - js/lib/test/QUnitAdapter.js
  - js/coffee/main/controllers/*.js
  - js/coffee/main/models/*.js
  - js/coffee/test/controllers/*.js

控制器

class PortfolioController extends Backbone.Controller
    constructor: ->

    test: (a, b) ->
        return a + b

测试代码

module("PortfolioController", {
    setup: -> @routeSpy = sinon.spy()
    teardown: -> window.location.hash = ""
})

test 'indexRoute', ->
    c = new PortfolioController
    equals c.test(1, 1), 2, "1 + 1 = 2"

问题

JsTestDriver 报错

ReferenceError: PortfolioController is not defined
ReferenceError: PortfolioController is not defined
    at Object. (http://mark-pc:9876/test/js/coffee/test/controllers/PortfolioController.test.js:12:5)
    at [object Object].test indexRoute (http://mark-pc:9876/test/js/lib/test/QUnitAdapter.js:40:15)

试过了:

  • 移除 jQuery、BackBone 等依赖项
  • 移除 Qunit 适配器并尝试使用 jstestdriver 断言
  • 在测试本身中添加了一个类,然后它就可以工作了

似乎是某种导出问题或原型冲突?

【问题讨论】:

    标签: javascript tdd coffeescript qunit js-test-driver


    【解决方案1】:

    听起来您需要将PortfolioController 设为全局,也许通过添加

    root = window ? global
    root.PortfolioController = PortfolioController
    

    文件的结尾,或者简单地替换

    class PortfolioController extends Backbone.Controller
    

    class @PortfolioController extends Backbone.Controller
    

    利用this 是该上下文中的全局根这一事实。

    CoffeeScript 永远不会自动导出超出文件范围的任何内容;你必须明确地做到这一点。请参阅我对此行为的解释 here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 2013-04-14
      • 2016-02-01
      • 2013-08-15
      • 2013-02-11
      • 2015-07-30
      • 2018-03-12
      相关资源
      最近更新 更多