我有一个 javascript 自动完成插件,它使用以下类(用咖啡脚本编写):查询、建议、建议集合和自动完成。每个类都有一个用 Jasmine 编写的相关规范。
该插件在模块中定义,例如:
(function(){
// plugin...
}).call(this);
这可以防止类污染全局命名空间,同时也可以将它们隐藏在任何测试中(使用 jasmine 的规范,或者使用 q-unit 之类的单元测试)。
在不污染全局命名空间的情况下公开 javascript 类或对象进行测试的最佳方法是什么?
我会用我想出的解决方案来回答,但我希望有更标准的东西。
更新:我尝试的解决方案
因为我是一个经验值
为了规范这些类,我发明了一个名为的全局对象_test
我公开了其中的所有类以进行测试。例如,在咖啡脚本中:
class Query
// ...
class Suggestion
// ...
// Use the classes
// Expose the classes for testing
window._test = {
Query: Query
Suggestion: Suggestion
}
然后,在我的规格中,我可以透露我正在测试的课程:
Query = window._test.Query
describe 'Query', ->
// ...
这样做的好处是只有_test
对象被污染,并且它不太可能与该对象的另一个定义发生冲突。但它仍然没有我想要的那么干净。我希望有人能提供更好的解决方案。
我认为类似于 CommonJS 模块系统(由brunch http://brunch.io/,例如)会起作用。
您可以将代码分成模块,需要它们的部分将通过以下方式导入它们require
。唯一被“污染”的部分是由模块管理代码维护的模块映射,与您的非常相似test
object.
In Autocomplete.coffee
class exports.Query
// ...
class exports.Suggestion
// ...
然后在Autocomplete.spec.coffee
{Query, Suggestion} = require 'app/models/Autocomplete'
describe 'Query', ->
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)