我一直在尝试通过express node.js项目将单元测试与我的Backbone模型集成,并且难以准确掌握如何完成此任务。 (旁注:我来自很多Java背景,我意识到存在差异,但我喜欢到目前为止节点开发环境的简洁和优雅。)
我的问题源于以下问题,骨干模型需要暴露给浏览器以便在其中运行,而通过mocha进行的测试是节点运行时环境中的“服务器端”。
以下是我所说的一个例子:
模型文件:/public/js/backbone/models.js
var SomeModel = Backbone.Model.extend({...});
服务器端测试:/test/backbone/models-test.js
???
我写了???因为通过服务器端的正常单元测试你只需要:
var SomeModule = require('./someModule');
然后开始你的快乐方式。显然,由于浏览器没有在Node中运行,因此模块不可用。
我已经阅读了一些帖子,说明你需要在require.js中包装你的浏览器端javascript,这会将这些javascript文件自动放入节点命名空间,允许你执行一个需求并继续进行测试。但是,我还没有找到完成这项任务的连贯方式,而且我一直试图寻找一些例子,但似乎找不到适用的东西。当然,很可能我对这个框架一般缺乏知识,因为我仍然围绕着如何在javascript中注入事物,注入依赖等等的整个想法。
任何帮助都会非常感激,如果这个问题已被问过一百万次了,我很抱歉,我确信它已经问了,我问的方式不正确。
提前致谢。
答案 0 :(得分:5)
如果您有一些仅限节点的代码(如果您只计划在节点下执行单元测试,那么您可以采用这种方法:
var Backbone = require('backbone');
public/js/backbone.js
符号链接到node_moules/backbone/backbone.js
下的文件。如果您只使用浏览器代码,则可以根据需要使用Backbone
全局变量或require.js
填充版本。
如果你有想要在浏览器中运行但又在节点中工作的代码(比如你的模型),那么最干净的解决方案就是使用var Backbone = require('backbone');
将它编码为CommonJS(节点)样式并以此方式运行节点,但当您将它发送到浏览器并使用require.config
&时,请用requirejs / AMD包装器将其包装起来。 require.paths
将'backbone'映射到backbone.js文件。
这个非常受欢迎的问题/答案的详细信息:
https://stackoverflow.com/a/10914666/266795
另见:
http://backbonetutorials.com/organizing-backbone-using-modules/