在nodejs上使用mochatesting主干
我有一个nodejs应用程序,它具有用backbonejs和requirejs构build的客户端代码。 我想使用摩卡在我的nodejs服务器上testing客户端代码。
我的摩卡testing文件:test / view.coffee
requirejs = require 'requirejs' global.define = requirejs requirejs.config nodeRequire: require baseUrl: '../public/javascripts/libs/' paths: jquery: "jquery" Underscore: "underscore" Backbone: "backbone" shim: 'jquery': exports: '$' 'Underscore': exports: '_' 'Backbone': deps: ['jquery', 'Underscore'] exports: 'Backbone' requirejs ['../public/javascripts/views/test_view'], (TestView) -> describe 'TestView', -> view = new TestView()
要testing的Backbonejs文件:public / javascripts / views / test_view.coffee
define [ 'Backbone' ], (Backbone) -> class TestView extends Backbone.View initialize: -> ... TestView
在public / javascripts / libs我有jquery,主干和下划线的缩小(而不是AMD)版本。
当我运行我的testing时,我得到以下错误信息:
Error: Calling node's require("../public/javascripts/views/test_view") failed with error: Error: Calling node's require("Underscore") failed with error: Error: Cannot find module 'Underscore' at /node_modules/requirejs/bin/r.js:2262:27
不知何故,test / view.coffee中的requirejs.config的paths属性不被读取。 如果我从path中删除Backbone:“backbone”,我不会收到错误信息,说明模块“Backbone”缺失。 我没有在nodejs服务器上安装Backbone和Underscore。
编辑:通过将requirejs.config baseUrl更改为“public / javascripts / views / test_view”来修复path问题。 Requirejs没有使用baseUrl块的文件path(test / view.coffee)。 对于requirejs ['…'],(TestView)部分我必须使用test / view.coffee文件的path。
当我用摩卡运行我的testing时,我得到以下错误:
throw e; // process.nextTick error, or 'error' event on first tick ^ Error: Calling node's require("../public/javascripts/views/test_view") failed with error: TypeError: Object #<Object> has no method 'load'
编辑:我忘了提及,我已经添加了“jade!templates / test_template”到我的test_view。 我删除了它,现在摩卡正在运行testing。 但是我得到的错误:
TypeError: object is not a function at Object.CALL_NON_FUNCTION_AS_CONSTRUCTOR (native)
该行:
view = new TestView()
导致错误。
这里的问题是在服务器上,RequireJS回落到节点的require()。 一个可能的解决scheme是安装NPM的Backbone,以及将public_lib / backbone.js的node_modules / backbone / backbone.js符号链接。 然后,您可以使用节点的或RequireJS的require()来要求主干。