ReferenceError: CoffeeScript + JsTestDriver + Qunit
В настоящее время я изучаю TDD с CoffeeScript и JsTestDriver, однако я застрял в ReferenceError, выданной JsTestDriver.
Некоторая информация:
- Использование плагина IntelliJ JsTestDriver
- Тестирование через 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 и попробовал с утверждениями jstestdriver
- Добавил класс внутри самого теста, потом все заработало
Похоже на какую-то проблему экспорта или конфликт прототипов?
1 ответ
Решение
Похоже, вам нужно сделать PortfolioController
глобальный, возможно, добавив
root = window ? global
root.PortfolioController = PortfolioController
конец файла, или просто заменив
class PortfolioController extends Backbone.Controller
с
class @PortfolioController extends Backbone.Controller
пользуясь тем фактом, что this
является глобальным корнем в этом контексте.
CoffeeScript никогда не экспортирует ничего, выходящего за рамки файла, автоматически; Вы должны сделать это явно. Смотрите мое объяснение этого поведения здесь.