ReferenceError: CoffeeScript + JsTestDriver + Qunit - PullRequest
1 голос
/ 05 июня 2011

В настоящее время я смотрю в TDD с CoffeeScript и JsTestDriver, однако я застрял в ReferenceError, выданном JsTestDriver.

Некоторая информация:

  • Использование подключаемого модуля IntelliJ JsTestDriver
  • Тестирование через Chrome
  • Настроенный JsTestDriver аналогично: http://code.google.com/p/js-test-driver/wiki/QUnitAdapter
  • Запись тестов в CoffeeScript
  • CoffeeScript isскомпилировано в javascript и помещено в настроенные каталоги до запуска теста

Config

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
  • Добавлен классвнутри самого теста он работал

Похоже на какую-то проблему экспорта или протоконфликт типов?

1 Ответ

3 голосов
/ 05 июня 2011

Звучит так, как будто вам нужно сделать PortfolioController глобальным, возможно, добавив

root = window ? global
root.PortfolioController = PortfolioController

конец файла или просто заменив

class PortfolioController extends Backbone.Controller

на

class @PortfolioController extends Backbone.Controller

с учетом того факта, что this является глобальным корнем в этом контексте.

CoffeeScript никогда не экспортирует ничего, выходящее за рамки файла;Вы должны сделать это явно.Смотрите мое объяснение этому поведению здесь .

...