ko 未定义 Chutzpah 中的错误
ko is not defined Error in Chutzpah
我正在尝试为我的 SPA 项目编写单元测试。我们在哪里使用了Durandal (Framework), Knockout (Binding) with RequireJs
。
我在 Visual Studio 2012 年安装了 Chutzpah。
当我 运行 我的视图模型测试时,它抛出错误,即使正确加载了 knockout 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"}
]
}
我的Config 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);
});
});
});
});
视图模型代码:
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 声明 require js 内容(如您所建议的)。
但是当我在 Chutzpah 声明中尝试同样的操作时,这是行不通的。不知道为什么。
希望您理解问题所在。
在问题中显示的两个模块中,您使用 ko
但没有在依赖项列表中列出 knockout
。这是获得错误的可靠方法。修改您的模块以在依赖项中列出 knockout
,并在您给 define
的回调中添加相应的参数。例如,
define(['knockout', 'plugins/dialog'], function (ko, dialog) {
我正在尝试为我的 SPA 项目编写单元测试。我们在哪里使用了Durandal (Framework), Knockout (Binding) with RequireJs
。
我在 Visual Studio 2012 年安装了 Chutzpah。
当我 运行 我的视图模型测试时,它抛出错误,即使正确加载了 knockout 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"}
]
}
我的Config 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);
});
});
});
});
视图模型代码:
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 声明 require js 内容(如您所建议的)。
但是当我在 Chutzpah 声明中尝试同样的操作时,这是行不通的。不知道为什么。
希望您理解问题所在。
在问题中显示的两个模块中,您使用 ko
但没有在依赖项列表中列出 knockout
。这是获得错误的可靠方法。修改您的模块以在依赖项中列出 knockout
,并在您给 define
的回调中添加相应的参数。例如,
define(['knockout', 'plugins/dialog'], function (ko, dialog) {