Javascript 如何正确使用RequireJS?

Javascript 如何正确使用RequireJS?,javascript,testing,requirejs,jasmine,Javascript,Testing,Requirejs,Jasmine,我需要测试一个JavaScript项目。这里描述了几个模块,但当我尝试加载它们时,出现了一些问题 define([ 'core/BaseModel' ], function (BaseModel) { var MessageModel = BaseModel.extend({ defaults: { messageType: "Advertisment", receiver: "me", title: "Title", headi

我需要测试一个JavaScript项目。这里描述了几个模块,但当我尝试加载它们时,出现了一些问题

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时,这将失败。有什么问题吗?

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

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

并创建一个新实例:
var m=new Message()


希望这能有所帮助。

我找到了一个适用于这个确切示例的解决方案。而不是

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 () {
.....

这不是我的目的。我编辑了上面的代码。它应该说
Message
,而不是
User
。但这并没有解决问题。在Java中,我想说我想创建一个Message的实例。谢谢,但我已经发现了。(见我的答案)我现在面临一个不同的问题…如果你按照我在答案中所展示的那样做,它将起作用。因为答案解决了你原来的问题,我建议接受这个作为答案,然后在你描述第二个问题的地方问另一个问题。请不要在答案中发布更多的问题。