backbonejs と requirejs でビルドされたクライアント側コードを持つ nodejs アプリケーションがあります。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 には、縮小された (AMD ではない) バージョンの jquery、backbone、および underscore があります。
テストを実行すると、次のエラー メッセージが表示されます。
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 に追加したことを忘れていました。私はそれを削除しましたが、今は mocha がテストを実行しています。しかし、私はエラーが発生します:
TypeError: object is not a function
at Object.CALL_NON_FUNCTION_AS_CONSTRUCTOR (native)
この線:
view = new TestView()
エラーを引き起こしています。