目前我正在研究使用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)
尝试:
似乎有些出口问题或原型冲突?
答案 0 :(得分:3)
听起来你需要让PortfolioController
成为全球性的,或许可以通过添加
root = window ? global
root.PortfolioController = PortfolioController
文件的结尾,或者只是替换
class PortfolioController extends Backbone.Controller
与
class @PortfolioController extends Backbone.Controller
利用this
是该上下文中的全局根的事实。
CoffeeScript永远不会自动导出文件范围之外的任何内容;你必须明确地做。请参阅我对此行为的解释here。