Mit*_*tch 7 javascript testing unit-testing coffeescript jasmine
我有一个javascript自动完成插件,它使用以下类(用coffeescript编写):Query,Suggestion,SuggestionCollection和Autocomplete.这些类中的每一个都有一个用Jasmine编写的相关规范.
插件在模块中定义,例如:
(function(){
// plugin...
}).call(this);
Run Code Online (Sandbox Code Playgroud)
这可以防止类污染全局命名空间,但也可以将它们隐藏在任何测试中(使用jasmine进行规范,或使用类似q-unit的单元测试).
在不污染全局命名空间的情况下,公开javascript类或对象进行测试的最佳方法是什么?
我会回答我提出的解决方案,但我希望有一些更标准的东西.
更新:我尝试的解决方案
因为我是一个<100 xp的新手,我无法回答8个小时的问题.而不是等待我只是添加我在这里做的.
为了规范这些类,我发明了一个名为的全局对象_test,我公开了所有类以进行测试.例如,在coffeescript中:
class Query
// ...
class Suggestion
// ...
// Use the classes
// Expose the classes for testing
window._test = {
Query: Query
Suggestion: Suggestion
}
Run Code Online (Sandbox Code Playgroud)
在我的规范中,我可以透露我正在测试的类:
Query = window._test.Query
describe 'Query', ->
// ...
Run Code Online (Sandbox Code Playgroud)
这样做的好处是只有_test对象被污染,并且它不太可能与该对象的另一个定义发生冲突.尽管如此,它仍然没有我想要的那么干净.我希望有人能提供更好的解决方案.
我认为像 CommonJS 模块系统(例如brunch使用的)这样的东西可以工作。
您可以将代码分成模块,需要它们的部分将通过require. 唯一被“污染”的部分是模块管理代码维护的模块映射,与您的test对象非常相似。
在Autocomplete.coffee
class exports.Query
// ...
class exports.Suggestion
// ...
Run Code Online (Sandbox Code Playgroud)
然后在Autocomplete.spec.coffee
{Query, Suggestion} = require 'app/models/Autocomplete'
describe 'Query', ->
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
802 次 |
| 最近记录: |