2016-07-28 68 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。 –