通过节点js测试骨干模型

dar*_*rdo 0 mocha.js node.js express backbone.js

我一直试图通过express node.js项目将单元测试与我的Backbone模型集成,并且难以准确掌握如何完成此任务.(旁注:我来自很多Java背景,我意识到存在差异,但我喜欢到目前为止节点开发环境的简洁和优雅.)

我的问题源于以下问题,骨干模型需要暴露给浏览器才能在其中运行,而通过mocha进行测试是节点运行时环境中的"服务器端".

这是我所说的一个例子:

模型文件:/public/js/backbone/models.js

var SomeModel = Backbone.Model.extend({...});
Run Code Online (Sandbox Code Playgroud)

服务器端测试:/test/backbone/models-test.js

???
Run Code Online (Sandbox Code Playgroud)

我写 ???因为通过服务器端的正常单元测试你只需:

var SomeModule = require('./someModule');
Run Code Online (Sandbox Code Playgroud)

并开始你的快乐方式.显然,由于浏览器没有在Node中运行,因此模块不易获得.

我已经阅读了一些帖子,说明你需要在require.js中包装你的浏览器端javascript,这会将这些javascript文件自动放入节点命名空间,允许你执行一个需求并继续进行测试.但是,我还没有找到完成这项任务的连贯方式,而且我一直试图寻找一些例子,但似乎找不到适用的东西.当然,很可能我对这个框架一般缺乏知识,因为我仍然围绕着如何在javascript中注入事物,注入依赖关系等的整个想法.

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

提前致谢.

Pet*_*ons 5

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

  • npm安装主干
  • var Backbone = require('backbone');
  • 只需确保从NPM获得的主干版本与您发送到浏览器的版本相同.如果愿意,您甚至可以public/js/backbone.js根据符号链接到该文件node_moules/backbone/backbone.js.

如果你有只使用浏览器的代码,你可以使用Backbone全局变量或它的require.jsshimmed版本.

如果你有想要在浏览器中运行但又在节点中工作的代码(比如你的模型),那么最干净的解决方案是使用它编写CommonJS(节点)样式var Backbone = require('backbone');并在节点中以这种方式运行它,但用requirejs包装它将AMD封装器发送到浏览器并使用require.config&require.paths将'backbone'映射到backbone.js文件.

这个非常受欢迎的问题/答案的细节:

/sf/answers/764026651/

也可以看看:

http://backbonetutorials.com/organizing-backbone-using-modules/