我有一个nodejs应用程序,它使用backbonejs和requirejs构建客户端代码。 我想使用mocha在我的nodejs服务器上测试客户端代码。
我的mocha测试文件: 测试/ 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()
要测试的Backbonejs文件: 公共/ Javascript角/视图/ test_view.coffee
define [
'Backbone'
], (Backbone) ->
class TestView extends Backbone.View
initialize: ->
...
TestView
在public / javascripts / libs中,我有jquery,backbone和underscore的缩小(不是AMD)版本。
当我运行测试时,我收到以下错误消息:
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属性。 如果我从路径中删除Backbone:“backbone”,我就不会收到错误消息“模板'Backbone'丢失。 我没有在nodejs服务器上安装Backbone和Underscore。
修改 通过将requirejs.config baseUrl更改为'public / javascripts / views / test_view'来修复路径问题。 Requirejs没有使用baseUrl块的文件路径(test / view.coffee)。对于requirejs ['...'],(TestView)部分,我必须使用test / view.coffee文件的路径。
当我使用mocha运行测试时,我收到以下错误:
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中。 我删除它,现在摩卡正在运行测试。但是我得到了错误:
TypeError: object is not a function
at Object.CALL_NON_FUNCTION_AS_CONSTRUCTOR (native)
行:
view = new TestView()
导致错误。
答案 0 :(得分:0)
这里的问题是,在服务器上,RequireJS回退到节点的require()。一种可能的解决方案是使用NPM安装Backbone,并将symlink node_modules / backbone / backbone.js安装到public / lib / backbone.js。然后,您可以使用节点或RequireJS的require()来要求主干。