Я пытаюсь создать способ создания классов сценариев в стиле 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, сможет направить меня в правильном направлении.
Спасибо.