在JsTestDriver中设置一个CoffeeScript单元测试

4
我将为您进行翻译:

我正在尝试使用JsTestDriver实现一个非常基本的单元测试,用于CoffeeScript/JavaScript。我有两个文件:

1.) lib/Greeter.coffee

greet = (name) ->
    "Hello #{name}"

2.) lib/GreeterTest.coffee

tests = {
    "Test 1": -> assertEquals("Hello World!", greet "World")
}

TestCase("Test for introducing the test framework", tests)

我的 jsTestDriver.conf 文件使用以下行定义它们的路径:- lib/*.js。然而,在执行测试时,我得到了这样的结果:Total 0 tests (Passed 0; Fails: 0; Errors: 0)
我确定测试可以被定位,因为插入一个明显的程序错误会导致在具体文件中检测到该错误。同时,插入警报调用会导致预期的行为:在被捕获的浏览器中,我看到了警报消息框。
我错过了什么吗?如何对此进行调试?

然而有效的是以下内容:

TestCase("Test case 1", {

    testGreet: ->
        greeter = new Greeter
        assertEquals("Hello World!", greeter.greet "World")
})

并且

class @Greeter

   constructor: ->

   greet: (name) ->
        return "Hello #{name}!"

如果两个文件位于同一文件夹中,您可以省略@
2个回答

3
请看这个问题:ReferenceError: CoffeeScript + JsTestDriver + Qunit。您遇到了相同的问题,因为greet =定义了一个局部变量,在Greeter.coffee之外不可见。将其更改为window.greet =@greet =
然而,这并不能解释Total 0 tests问题。我对JsTestDriver不是非常熟悉,但在这个页面上建议测试名称必须以“test”开头——是不是因为大写的名称"Test 1"被忽略了?试着将其更改为"test1"

你可能是对的,我在我的问题中添加了一个可能的解决方案。在那里,测试函数以“test”开头。 - Konrad Reiche
所以如果 testGreet: 可以工作,但是 TestGreet: 不行,那么你应该将我的答案标记为正确的。 - Trevor Burnham
别着急,Stack Overflow 上关于阅读答案和接受答案之间时间间隔的讨论仍在进行中 :-) - Konrad Reiche

1
确保在运行java -jar $JSTESTDRIVER -tests all时,你的目录与测试文件所在的目录相同,这应该可以解决“总共0个测试”的问题。我曾经遇到过同样的问题。

不,实际上是因为我没有使用前缀“test..”来命名测试函数,但因为告诉了另一个可能的原因,所以加1分! - Konrad Reiche

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接