1

現在、CoffeeScriptとJsTestDriverを使用してTDDを調べていますが、JsTestDriverによってスローされたReferenceErrorでスタックしています。

いくつかの情報:

  • IntelliJJsTestDriverプラグインの使用
  • Chromeによるテスト
  • 次と同じ方法でJsTestDriverを構成しました:http ://code.google.com/p/js-test-driver/wiki/QUnitAdapter
  • CoffeeScriptでテストを書く
  • CoffeeScriptはjavascriptにコンパイルされ、テストが実行される前に構成されたディレクトリに配置されます

構成

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アダプターを削除し、jstestdriverassertsで試してみました
  • テスト自体の中にクラスを追加し、それが機能しました

エクスポートの問題やプロトタイプの競合のように見えますか?

4

1 に答える 1

3

PortfolioControllerおそらく追加することによって、グローバルにする必要があるように聞こえます

root = window ? global
root.PortfolioController = PortfolioController

ファイルの終わり、または単に置き換えることによって

class PortfolioController extends Backbone.Controller

class @PortfolioController extends Backbone.Controller

thisその文脈でグローバルルートであるという事実を利用します。

CoffeeScriptは、ファイルのスコープを超えるものを自動的にエクスポートすることはありません。明示的に行う必要があります。この動作については、ここで私の説明を参照してください。

于 2011-06-05T18:08:40.310 に答える