通过节点js测试骨干模型

时间:2012-12-20 21:23:54

标签: node.js backbone.js express mocha

我一直在尝试通过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中注入事物,注入依赖等等的整个想法。

任何帮助都会非常感激,如果这个问题已被问过一百万次了,我很抱歉,我确信它已经问了,我问的方式不正确。

提前致谢。

1 个答案:

答案 0 :(得分:5)

如果您有一些仅限节点的代码(如果您只计划在节点下执行单元测试,那么您可以采用这种方法:

  • npm install backbone
  • var Backbone = require('backbone');
  • 只需确保从NPM获得的主干版本与您发送到浏览器的版本相同。如果愿意,您甚至可以将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/