我有一个 nodejs 应用程序,它具有使用backbonejs 和requirejs 构建的客户端代码。我想使用 mocha 在我的 nodejs 服务器上测试客户端代码。
我的摩卡测试文件: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()
要测试的 Backbonejs 文件:public/javascripts/views/test_view.coffee
define [
'Backbone'
], (Backbone) ->
class TestView extends Backbone.View
initialize: ->
...
TestView
在 public/javascripts/libs 中,我有 jquery、主干和下划线的缩小(不是 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 的路径属性。如果我从路径中删除 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 中。我删除了它,现在 mocha 正在运行测试。但我得到了错误:
TypeError: object is not a function
at Object.CALL_NON_FUNCTION_AS_CONSTRUCTOR (native)
该行:
view = new TestView()
导致错误。