QUnit взрывается, когда функция с утверждениями привязана к дочернему объекту в CoffeeScript - PullRequest
0 голосов
/ 27 ноября 2011

Я пытаюсь создать способ создания классов сценариев в стиле PHPUnit в CoffeeScript. Я очень близко подошел к достижению своей цели с помощью этих двух классов:

QUnitTestCase.coffee:

class QUnitTestCase

    constructor: (name) ->
        module name
        @setUp()
        @runAllTests()

    setUp: ->
        return null

    runAllTests: ->
        for funcName, func of @
            if funcName.substr(0, 4) is 'test' and typeof func is 'function'
                testName = funcName.substr(4).charAt(0).toLowerCase() + funcName.substr(5)
                @setUp()
                test testName, func()
        return null

CircleTest.coffee:

class CircleTest extends QUnitTestCase

    constructor: ->
        super "Circle"

    setUp: ->
        @mockCanvas = mock(Canvas)
        @testObj = new Circle(@mockCanvas)
        $('canvas').css display: 'none'

    testDrawReturnsNull: =>
        returned = @testObj.draw()
        strictEqual null, returned, 'returns null'

Однако QUnit взрывается с этой ошибкой: «Uncaught TypeError: Невозможно прочитать« утверждения »свойства undefined (строка 666 qunit.js)».

Глядя на QUnit, я полагаю, что каким-то образом объект Test внутри QUnit становится неправильным, когда функция, которая определяет утверждения, привязана к объекту. Если я переместу вызов «test ()» в дочерний класс, как это ...

    testDrawReturnsNull: =>
        test "drawReturnsNull", =>
            returned = @testObj.draw()
            strictEqual null, returned, 'returns null'

... тогда QUnit работает нормально без каких-либо ошибок, но это создает своего рода дублирование, с которым мне не очень комфортно. Возможно, кто-то, кто лучше понимает QUnit, сможет направить меня в правильном направлении.

Спасибо.

1 Ответ

1 голос
/ 27 ноября 2011

Вы написали

test testName, func()

вместо

test testName, func

Это может показаться проблемой. Вы хотите передать функцию в test, а не запускать ее сначала и передавать возвращаемое значение.

...