gpt4 book ai didi

javascript - ko 未定义 厚颜无耻的错误

转载 作者:行者123 更新时间:2023-12-02 15:00:14 25 4
gpt4 key购买 nike

我正在尝试为我的 SPA 项目编写单元测试。我们在哪里使用了 Durandal (Framework), Knockout (Binding) with RequireJs

我已经在 Visual Studio 2012 中安装了 Chutzpah。

当我运行 View 模型测试时,即使正确加载了 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"}
]
}

我的配置 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 的配置工作完美,因为 knockout 也与此相同。但给出错误。

任何想法/建议为什么会出现错误?

我需要单独加载ko( knockout )吗?

编辑 1:

我尝试更改 knockoutko它给了我错误 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;
});

因此在任何 View 模型中我们都可以获得 knockout as ko 的实例,无需在每个 veiwmodel 中声明 Knockout 的 require js 内容(如您所建议的)。

但是当我在 Chutzpah 声明中尝试相同的操作时,这是行不通的。不知道为什么。

希望您能理解这个问题。

最佳答案

在问题中显示的两个模块中,您都使用 ko 但没有在依赖项列表中列出 knockout。这是获得错误的可靠方法。修改您的模块以在依赖项中列出 knockout,并将相应的参数添加到您为 define 提供的回调中。例如,

define(['knockout', 'plugins/dialog'], function (ko, dialog) {

关于javascript - ko 未定义 厚颜无耻的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35480391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com