网站搜索

knockout.js - Chutzpah 错误:对象不支持属性或方法 'filter'


我正在尝试通过 Chutzpah 在我的 Knockout 视图模型上运行 Jasmine 测试,这些视图模型是用 TypeScript 编写的,但由于以下错误,这似乎不可能:

Chutzpah Error: Object doesn't support property or method 'filter'

每当我访问一个 knockout 可观察对象时,就会抛出此错误,并且可以通过以下简单示例重新创建。

/// <reference path="../../typings/jquery/jquery.d.ts" />
/// <reference path="../../typings/knockout/knockout.d.ts" />
/// <reference path="../../typings/jasmine/jasmine.d.ts" />

module Example {
    export class KnockoutClass {
        public anObservable = ko.observable<string>();

        public aComputed = ko.computed<boolean>(() => {
            return this.anObservable().length() > 5;
        });
    }
}

describe("This", () => {
    it(" will throw an error", () => {        

        var temp: Example.KnockoutClass = new Example.KnockoutClass();

    });
});

我在这里是不是做错了什么,还是说chutzpah与knockout/typescript组合不兼容?

更新

所以我设法通过以下方式让chutzpah运行我的测试:

  1. 从我的项目中移除 'Jasmine Test Framework' NuGet 包,并用 'jasmine.js' NuGet 包替代它。
  2. 在我的 tests 目录中添加一个 jasmine specrunner.html 文件,该文件引用我的测试及其依赖项
  3. 在 工具->选项->Chutzpah->单元测试资源管理器 中将测试模式设置为 HTML
  4. 从测试资源管理器窗口运行测试

这使我的测试成功运行,但当我尝试通过右键点击->‘运行 JS 测试’时,我仍然会遇到相同的异常,并且我也无法调试测试。

问题似乎是我的引用都没有被解析(filter 方法是在 jquery 中定义的),所以也许我需要使用 require.js 或其他某些模块加载器来解析我的依赖关系?

答案#1

通过升级到最新版本的 Chutzpah 可以解决此问题。