8

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

4

3 回答 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.barand Foo.baz

于 2011-04-05T14:49:21.377 回答
3

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

于 2011-05-08T03:41:58.623 回答
3

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

对于 Jasmine 和 CoffeeScript,尤其是与 jQuery 结合使用时,您应该查看InstantJasmineCoffee项目和这篇相关的博客文章

于 2011-04-05T17:20:00.460 回答