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

Posted

技术标签:

【中文标题】Coffeescript + 单元测试:全局变量?【英文标题】:Coffeescript + Unit Testing : Global Variables? 【发布时间】:2011-07-29 17:44:37 【问题描述】:

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

【问题讨论】:

【参考方案1】:

您应该针对您从 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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于Coffeescript + 单元测试:全局变量?的主要内容,如果未能解决你的问题,请参考以下文章

使用来自 WebPack.DefinePlugin 的全局注入变量进行 NodeJS Mocha 单元测试

使用 Jest 测试时未定义全局节点配置变量

Meteor >0.6.0 和 CoffeeScript 的全局类

模拟全局变量

coffeescript初体验

如何在 Mockito 中模拟全局变量