【发布时间】:2016-05-30 13:20:02
【问题描述】:
我正在尝试为我的 SPA 项目编写单元测试。我们在哪里使用了Durandal (Framework), Knockout (Binding) with RequireJs。
我已经在 Visual Studio 2012 中安装了 Chutzpah。
当我为视图模型运行测试时,即使正确加载了淘汰赛 js 和其他 js,它也会将我抛出错误。
Uncaught ReferenceError: ko is not defined
我的 Json 配置代码:
{
"Framework": "jasmine",
"TestHarnessReferenceMode": "AMD",
"TestHarnessLocationMode": "SettingsFileAdjacent",
"References" : [
{"Path" : "../Scripts/require.js" },
{"Path" : "config.js" }
],
"Tests" : [
{"Path": "tests"}
]
}
我的配置 Js 代码:
require.config({
paths: {
'text': '../Scripts/text',
'durandal': '../Scripts/durandal',
'plugins': '../Scripts/durandal/plugins',
'jquery': '../Scripts/jquery-2.1.4',
'knockout': '../Scripts/knockout-3.3.0'
},
shim: {
}
});
我的 FirstTest.Js 代码:
define(['project/modules/Settings/Subscriber/Viewmodels/Channels'],
function (nChannel) {
describe("Get Channels", function () {
it("will check the Get Channels call and result", function () {
var disp = nChannel.getChannels().then(function () {
var actualResult = ko.toJS(nChannel.Channels);
expect(actualResult.length).toEqual(3);
});
});
});
});
ViewModel 代码:
define(['plugins/dialog'], function (dialog) {
var subscriberList = ko.observableArray(); //Getting Error here - while loading the Js for Unit Testing
var JsQ = $; //Getting JQUERY members here. // Works good.
//Other Logics goes here
return {
subscriberList : subscriberList,
JsQ : JsQ
};
});
Jquery 的配置非常完美,因为淘汰赛也一样。但给出错误。
任何想法/建议为什么会出错?
我需要单独加载 ko (knockout) 吗?
编辑 1:
我尝试将 knockout 更改为 ko 它给了我错误 Uncaught Error: Script error for: knockout。
编辑 2:
我在应用此解决方案时面临的问题是,那些现有的代码文件需要进行大量更改,并且文件数为数百。我们从Init.Js 加载了 Jquery 和 Knockout。如下所示。
requirejs.config({
paths: {
'text': '../Scripts/text',
'durandal': '../Scripts/durandal',
'plugins': '../Scripts/durandal/plugins'
}
});
define('jquery', [], function () {
return jQuery;
});
define('knockout', [], function () {
return ko;
});
因此,在任何视图模型中,我们都可以获得knockout as ko 的实例,而无需在每个 veiwmodel 中为 Knockout 声明所需的 js 内容(如您所建议的那样)。
但是当我在 Chutzpah 声明中尝试同样的方法时,这是行不通的。不知道为什么。
希望你能理解问题。
【问题讨论】:
标签: javascript jquery knockout.js requirejs chutzpah