RequireJs加载模块 - Qunit

use*_*464 4 qunit requirejs

我对RequireJS很新,并且在将QUnit编写为源代码时遇到了麻烦,该源代码具有使用requireJS动态加载模块的逻辑.

以下是源代码:factory/Factory.js*

getPage: function (callback) {

    //doSomething here

    require(['page/something'], function() {

         callback();

    })
}
Run Code Online (Sandbox Code Playgroud)

在运行QUnit时,永远不会加载模块"page/something",并且永远不会调用回调.这里有什么我想念的吗?感谢您的回复.

**QUnit factory/FactoryTests.js*

define(['underscore', 'factory/Factory'],
       function (_, Factory) {

           module("Factory", {
               setup:function () {
               },
               teardown:function () {
               }
           });

           test("GetPage", function () {
              var isCallbackInvoked = false;
              var mockCallback = function () {
                  isCallbackInvoked = true;
              }

              Factory.getPage(mockCallback);
              ok(isCallbackInvoked);

           });

});
Run Code Online (Sandbox Code Playgroud)

*test-require-config.js**

require.config({

    baseUrl: "../../resources/js",

    paths:{
        jquery:'../jquery-1.8.2',
    jquery_star_rating : '../jquery/jquery.rating',
        underscore:'..underscore-1.4.1',
        backbone:'../backbone-0.9.2',
        jquery_star_rating : '../jquery.rating',
        text : '../require-text-2.0.3',
        sinon: '../../../../sinon',
    },
    shim:{
        underscore:{
            exports:'_'
        },
        backbone:{
            deps:["jquery", "underscore"],
            exports:"Backbone"
        }
        jquery_star_rating : {
            deps : ['jquery']
        }
    }

});

var dependencies = [
    'jquery',
    'jquery_star_rating',
    'underscore',
    'backbone',       
    'sinon',
];

require(dependencies, function () {

    require(['../../../../test/js/testsuite'], function(suite){

    })

});
Run Code Online (Sandbox Code Playgroud)

testsuite.js

function () {

    QUnit.config.autostart = false;

    var testModules = [       
        "factory/FactoryTests.js"
    ];

    require(testModules, QUnit.start);
}());
Run Code Online (Sandbox Code Playgroud)

谢谢!!

kei*_*ant 6

首先,澄清一下:您的QUnit测试页面是什么样的?我猜它要么列出零测试,要么是一个空白页面.

如果是这样的话,我在同样的事情上遇到了很多麻烦."正确"的答案正是你所做的.但经过大量的代码处理后,在我的设置中,QUnit仍然在我的任何测试定义之前开始,尽管设置QUnit.config.autostart = false.

在testsuite.js结束时,尝试调用QUnit.load()而不是QUnit.start()(你也可以放弃autostart = false).这是一个无证件的功能,但它是唯一对我有用的东西.我相信它是默认情况下QUnit附加到onLoad事件的函数.不幸的是,使用RequireJS,onLoad在大多数js文件加载之前触发.