2012-06-28 73 views
2

我有一個使用backbonejs和requirejs構建客戶端代碼的nodejs應用程序。 我想使用摩卡在我的nodejs服務器上測試客戶端代碼。在nodejs上使用mocha測試skeletonjs

我的摩卡測試文件: 測試/ 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文件進行測試: 公共/ Java腳本/視圖/ test_view.coffee

define [ 
    'Backbone' 
], (Backbone) -> 
    class TestView extends Backbone.View 
    initialize: -> 
     ... 
    TestView 

在公共/ JavaScript的/ 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 

莫名其妙的路徑測試requirejs.config的屬性/ view.coffee不被讀取。 如果我從路徑中刪除Backbone:「backbone」,我不會收到錯誤消息,指出模塊'Backbone'缺失。 我沒有在nodejs服務器上安裝Backbone和Underscore。

編輯: 通過將requirejs.config baseUrl更改爲'public/javascripts/views/test_view'來修復路徑問題。 Requirejs沒有使用baseUrl塊的文件路徑(test/view.coffee)。對於requirejs ['...'],(TestView)部分,我必須使用test/view.coffee文件的路徑。

當我運行我的測試與摩卡我得到以下錯誤:

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' 

編輯: 我忘了提,我已經添加了「玉模板/ test_template!」我test_view。 我刪除了它,現在摩卡正在運行測試。但我得到的錯誤:

TypeError: object is not a function 
    at Object.CALL_NON_FUNCTION_AS_CONSTRUCTOR (native) 

行:

view = new TestView() 

導致錯誤。

回答

0

這裏的問題是,在服務器上,RequireJS回落到節點的require()。一個可能的解決方案是安裝帶有NPM的Backbone,並將symlink node_modules/backbone/backbone.js安裝到public/lib/backbone.js。然後,您可以使用節點或RequireJS的require()來要求主幹。

+1

謝謝你的回答。我通過更新requirejs.config baseUrl:'public/javascripts/libs /'來解決錯誤。我會更新我的問題。 – bekite

相關問題