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

8

我正在尝试使用Jasmine对用coffeescript编写的小型应用进行单元测试。我发现许多来源都说可以很好地对从coffeescript编译出来的JS代码进行单元测试。但是,如果所有内容都被包装在匿名函数中以避免污染命名空间,那么如何访问JS代码的数据和逻辑呢?难道每次都要使用-b标志运行编译器吗?

3个回答

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


3

我刚刚偶然发现了这个,如果你想便宜地开始使用Jasmine + CoffeeScript,你可以查看我在Github上发布的这个Skeleton Sinatra应用程序。它使用一个Rack过滤器动态编译CoffeeScript。包括示例规范和说明:https://github.com/searls/jasmine-coffee


3

很少有情况需要使用-b;普通测试不是其中之一。lawnsea非常正确,您应该导出您测试的所有内容(将其附加到Node下的exports或在浏览器中使用window)。这与任何编程语言都是相同的。

对于Jasmine和CoffeeScript,特别是与jQuery结合使用时,您应该查看InstantJasmineCoffee项目和此相关博客文章


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