2012-06-28 3 views
2

У меня есть приложение nodejs, которое имеет код на стороне клиента с backbonejs и requirejs. Я хочу протестировать клиентский код на моем сервере nodejs, используя mocha.test backbonejs with mocha on nodejs

Мой мокко тест файл: тест/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 файл, который будет испытываться: общественные/JavaScripts/просмотров/test_view.coffee

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

Публично/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 

Как-то пути атрибут requirejs.config в тесте/view.coffee не читается. Если я удаляю Backbone: «backbone» из путей, я не получаю сообщение об ошибке, отсутствующее в модуле «Backbone». Я не устанавливал Backbone и Underscore на сервере nodejs.

Edit: Исправлена ​​проблема с пути, изменив requirejs.config BaseUrl 'Общедоступный/JavaScripts/просмотров/test_view'. Requirejs не использует путь к файлу (test/view.coffee) для блока baseUrl. Для части 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' 

Edit: Я забыл упомянуть, что я добавил «нефритовый шаблоны/test_template!» К моему test_view. Я удалил его, и теперь мокка запускает тест. Но я получаю ошибку:

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

строку:

view = new TestView() 

вызывает ошибку.

ответ

0

Проблема в том, что на сервере RequireJS возвращается к требованию узла(). Возможным решением было бы установить Backbone с NPM и symlink node_modules/backbone/backbone.js в public/lib/backbone.js. Затем вам может потребоваться магистраль с использованием либо node, либо RequireJS 'require().

+1

Благодарим вас за ответ. Я исправил ошибку, обновив requirejs.config baseUrl: до 'public/javascripts/libs /'. Я уточню свой вопрос. – bekite