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

Jef*_*eff 8 unit-testing coffeescript jasmine

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

law*_*sea 9

您应该针对从CoffeeScript模块公开的公共接口进行测试.如果你的模块被称为Foo并且公开了两个公共方法,bar并且baz,你可以按照以下方式导出它们:

Foo =
    bar: (a, b) ->
        #implementation
    baz: (c) ->
        #implementation
(exports ? this).Foo = Foo
Run Code Online (Sandbox Code Playgroud)

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

Foo = require('foo') #assuming your module is compiled to foo.js
Run Code Online (Sandbox Code Playgroud)

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