【问题标题】:ko is not defined Error in Chutzpahko 未定义 Chutzpah 中的错误
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答非常有帮助。请看一下我的编辑#2。
    猜你喜欢
    • 1970-01-01
    • 2013-12-14
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多