2016-07-28 62 views
0

如何從節點中的RequireJS模塊導出函數?通過代碼,我得到了一個空對象,而不是我期望的Backbone模型。使用節點中的RequireJS導出函數返回空對象

first.js包含:

'use strict'; 
var define=require('amd-define'); 
define(function (require) { 

var Backbone = require('backbone'); 

// Our basic **Todo** model has `title`, `order`, and `completed` attributes. 
var Todo = Backbone.Model.extend({ 
    // Customizations of my model... 
}); 

return Todo; 
}) 

我的測試文件test.js包含:

'use strict'; 
var chai =require("chai"); 
var assert=chai.assert; 
var expect=chai.expect; 
var Todo=require("first"); 

describe('Tests for Todo model', function() { 
    it('should create global variables for Todo', function() { 
     expect(Todo).to.be.exist; 
     console.log(typeof (Todo)) 
    }); 

    it('should be created with default values for its attributes',    function() { 
     var todo = new Todo(); 
     expect(todo.get('title')).to.equal(''); 
    }); 

    it('should fire a custom event when state change', function() { 
     var todo = new Todo(); 
     todo.set({completed: true, order: 1}); 
     todo.set('title', 'my title'); 
    }); 
}); 

它給人的錯誤Todo不是一個函數。 console.log聲明打印object

回答

0

amd-define要麼是越野車,要麼不支持CommonJS sugar。 (後者可能是這樣。我不認爲它是需要做必要的支持CommonJS的糖的依賴轉變照顧任何代碼。)

我建議傾銷amd-define和使用amd-loader代替。我已經使用了它多年,它的工作原理。

爲您的代碼:

  1. first.js刪除var define=require('amd-define');

  2. 添加require('amd-loader')之前在您的測試文件(安裝後),您加載任何AMD模塊。

我能從first.js這樣做得到輸出。

+0

工作就像一個魅力男人。感謝所有的幫助! –

+0

但問題是,它不加載第三方庫,如q和my.Class,它們是通過代碼使用的bower安裝的,而不是用於摩卡的npm安裝amd-loader。 –