Coffeescript +单元测试:全局变量?

时间:2011-04-05 07:14:13

标签: unit-testing coffeescript jasmine

我正在尝试使用Jasmine对用coffeescript编写的小应用程序进行单元测试。我发现很多消息来源说单元测试可以很好地完成从coffeescript编译的JS。如果所有内容都包含在匿名函数中以避免污染名称空间,那么如何访问JS代码的数据和逻辑?是每次都使用-b标志运行编译器的唯一解决方案吗?

3 个答案:

答案 0 :(得分:9)

您应该针对从CoffeeScript模块公开的公共接口进行测试。如果您的模块被调用Foo并公开了两个公共方法barbaz,则可以按如下方式导出它们:

Foo =
    bar: (a, b) ->
        #implementation
    baz: (c) ->
        #implementation
(exports ? this).Foo = Foo

当然,这种模式还有其他变种。例如,请参阅underscore.coffee。现在您已公开了公共界面,只需以适当的方式使其可用于您的Jasmine测试。例如,如果您使用的是jasmine-node,则可以执行以下操作:

Foo = require('foo') #assuming your module is compiled to foo.js

然后,您的测试会调用Foo.barFoo.baz

答案 1 :(得分:3)

使用-b的情况很少有意义;普通测试不是其中之一。 lawnsea是完全正确的,您应该导出您测试的所有内容(将其附加到节点下的exports或浏览器中的window)。它与任何编程语言都是一样的,真​​的。

对于Jasmine和CoffeeScript,尤其是与jQuery结合使用时,您应该查看InstantJasmineCoffee项目和this related blog post

答案 2 :(得分:3)

我偶然发现了这一点,但是如果你想要便宜地开始使用Jasmine + CoffeeScript,你可以查看我发布给Github的这个骨架Sinatra应用程序。它使用机架过滤器动态编译CoffeeScript。示例规格&说明包括:https://github.com/searls/jasmine-coffee