Coffeescript + 单元测试:全局变量?
Posted
技术标签:
【中文标题】Coffeescript + 单元测试:全局变量?【英文标题】:Coffeescript + Unit Testing : Global Variables? 【发布时间】:2011-07-29 17:44:37 【问题描述】:我正在尝试使用 Jasmine 对一个用咖啡脚本编写的小型应用程序进行单元测试。我发现许多消息来源说单元测试可以在从咖啡脚本编译的 JS 上完美完成。如果所有内容都包装在匿名函数中以避免污染名称空间,您如何访问 JS 代码的数据和逻辑?是每次都使用 -b 标志运行编译器的唯一解决方案吗?
【问题讨论】:
【参考方案1】:您应该针对您从 CoffeeScript 模块公开的公共接口进行测试。如果您的模块名为Foo
并公开了两个公共方法bar
和baz
,您可以按如下方式导出它们:
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.bar
和Foo.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 单元测试