2011-06-05 70 views
1

目前我正在研究用CoffeeScript和JsTestDriver進行TDD,但是我被卡在JsTestDriver引發的ReferenceError上。ReferenceError:CoffeeScript + JsTestDriver + Qunit

一些信息:

配置

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,骨幹等
  • 移除Qunit適配器和jstestdriver斷言
  • 試圖
  • 已添加測試本身內部一個類,然後它的工作

似乎有些有點出口問題或原型衝突?

回答

3

聽起來像是你需要做PortfolioController一個全球性的,或許是增加

root = window ? global 
root.PortfolioController = PortfolioController 

文件的末尾,或者通過簡單地用

class @PortfolioController extends Backbone.Controller 

回吐更換

class PortfolioController extends Backbone.Controller 

this是這方面的全球根源。

CoffeeScript從不自動導出超出文件範圍的任何內容;你必須明確地做到這一點。看到我對此行爲的解釋here

+0

感謝在班級名稱前添加@這樣做的訣竅:) – 2011-06-05 19:25:36