2

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()

エラーを引き起こしています。

4

1 に答える 1

0

ここでの問題は、サーバー上で RequireJS がノードの require() にフォールバックすることです。考えられる解決策は、NPM を使用して Backbone をインストールし、node_modules/backbone/backbone.js を public/lib/backbone.js にシンボリック リンクすることです。その後、ノードまたは RequireJS の require() を使用してバックボーンを要求できます。

于 2012-06-28T12:49:38.770 に答える