2015-04-23 208 views
1

我需要测试一个JavaScript项目。这里描述了几个模块,但是当我尝试加载它们时出错了。如何正确使用RequireJS?

define([ 
    'core/BaseModel' 
], 

function (BaseModel) { 
    var MessageModel = BaseModel.extend({ 
    defaults: { 
     messageType: "Advertisment", 
     receiver: "me", 
     title: "Title", 
     heading_1: "Heading1", 
     heading_2: "Heading2" 
    }, 

    url: function() { 
     var base = this.apipath + '/companies/'; 
     if (this.isNew()) return base; 
     return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.id; 
    } 
    }); 

    return MessageModel; 
}); 

要加载我这样做的模块:

var message; 
beforeAll(function(done){ 
    require(['../../../public/js/app/models/Message'], function(Message){ 
     message = Message; 
     done(); 
    }); 
}); 

现在消息不是未定义的,但是当我测试,如果message.defaults或message.url定义此失败。那里有什么问题?

回答

0

鉴于../../../public/js/app/models/Message对应MessageModel,你想要做的是:

var Message = require('../../../public/js/app/models/Message');

和创建一个新的实例:var m = new Message();

希望这会有所帮助。

+0

sry那不是我的目的。我编辑了上面的代码。它应该说'Message'而不是'User'。但这并没有解决问题。 – Garrarufa

+0

在Java中,我会说我想创建消息的一个实例。 – Garrarufa

+0

编辑我的答案来演示如何创建一个实例。 –

-1

我找到了一个适用于这个确切例子的解决方案。取而代之的

message = Message; 

我写

message = new Message(); 

但我用不同的模块完全相同,只给出了一个超时错误,并不断未定义:

var router; 

beforeAll(function(done){ 
    require(['../../../public/js/app/routers/DesktopRouter'], function(Router){ 
     router = new Router(); 
     done(); 
    }); 
}); 

它的定义是:

define(["jquery", "underscore", "backbone", "core/BaseRouter", "models/Session", "i18n!locales", 

    "views/NavbarView", 
    "views/LoginView", 
    'views/SidebarView', 
    'views/FooterView', 
    'views/VehicleSidebarView', 
    "views/DashboardView", 
    "views/CompaniesView", 
    "views/WorkshopsView", 
    "views/VehiclesView", 
    "views/UsersView", 
    "views/AddVehicleView", 
    "views/VehicleTripsView", 
    "views/VehicleDataView", 
    "views/VehicleServiceView", 
    "views/VehicleErrorsView", 
    "views/MessageInboxView", 
    "views/AddUserView", 
    "views/EditUserView", 
    "views/EditProfileView", 
    "views/AppDownloadView", 
    "views/BlockBrowserView" 
], 

function($, _, Backbone, BaseRouter, Session, i18n, 

     NavbarView, 
     LoginView, 
     SideBarView, 
     FooterView, 
     VehicleSidebarView, 
     DashboardView, 
     CompaniesView, 
     WorkshopsView, 
     VehiclesView, 
     UsersView, 
     AddVehicleView, 
     VehicleTripsView, 
     VehicleDataView, 
     VehicleServiceView, 
     VehicleErrorsView, 
     MessageInboxView, 
     AddUserView, 
     EditUserView, 
     EditProfileView, 
     AppDownloadView, 
     BlockBrowserView 
) { 

var DesktopRouter = BaseRouter.extend({ 

    initialize: function() { 
..... 
+0

请不要在答案中发布进一步的问题。 – kryger