当函数与断言绑定到CoffeeScript中的子对象时,QUnit会爆炸

时间:2011-11-27 17:57:07

标签: coffeescript qunit

我正在尝试构建一种在CoffeeScript中执行PHPUnit样式的测试用例类的方法。我非常接近实现这两个课程的目标:

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:无法读取未定义的属性'断言'(qunit.js第666行)”。

看看QUnit,我相信当定义断言的函数绑定到对象时,QUnit中的Test对象会变得错误。如果我将调用“test()”移到子类,就像这样......

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

...然后QUnit运行良好,没有任何错误,但这会产生一种我并不十分满意的重复。或许更了解QUnit的人可以指出我正确的方向。

感谢。

1 个答案:

答案 0 :(得分:1)

你写了

test testName, func()

而不是

test testName, func

这似乎是一个问题。您希望将函数传递给test,而不是先运行它并传递返回的值。