我在 Rails 应用程序中使用 CoffeeScript,我想对它进行单元测试。谷歌没有发现任何东西,除了编写我自己的测试框架或测试 CoffeeScript 输出的 JavaScript 之外,还有什么方法可以做到吗?
4 回答
您可以将任何 JavaScript 测试框架与 CoffeeScript 一起使用。这将测试 CoffeeScript 输出的 Javascript,这是必要的,因为 CoffeeScript 本身无法执行。
为 CoffeeScript 编写自己的测试框架很有趣(我做过),但完全没有必要。
更新:Jasmine测试可以在 node.js 上运行,在这种情况下,测试和被测代码都可以是 CoffeeScript,不需要任何编译步骤。
您可以“按原样”使用 QUnit,但仍然只编写咖啡脚本 - 而没有胶水代码。
作为示例,我在 github 上有一个非常小的纯咖啡脚本项目 - rubyann。
HTML 测试页面rubyann_tests.html引用了测试jquery.rubyann.coffee的rubyann_tests.coffee文件。我没有编写任何 javascript 或任何其他代码来完成这项工作。
如果您使用命令行参数--allow-file-access-from-files ,测试仅在本地计算机上的 Chrome 上运行。但它可以在 Firefox 甚至 IE 上运行而没有问题。
附录- 测试也设置为通过 Node/gulp/qunitjs 在命令行上运行 - 下载 repo 并输入npm run test
我正在使用 QUnit 在我的 Rails 应用程序中测试 CoffeeScript,并在这里写下了我是如何做到的:http: //effectif.com/coffeescript/qunit-boilerplate
在我的文章中最有趣的是使用对 Coffee.load 的回调来保证包含测试的文件在包含被测代码的文件之后被加载:
<script type="text/coffeescript">
for file in ['models', 'controllers']
lib = "../../app/assets/javascripts/#{file}.js.coffee"
load_test = ->
test = "#{file}_test.coffee"
-> CoffeeScript.load(test)
CoffeeScript.load lib, load_test()
</script>
test
文章中解释了对变量进行柯里化的需要......
对于 Coffee-Script 单元测试,您可以尝试Beast-Test,它是从头开始为咖啡脚本编写的。仅供参考,我是自己的,但我认为您仍然会喜欢它。它类似于 JUnit