Karma + Jasmine 下 angular.mock.inject 的 TypeScript AngularJS 控制器测试问题

Posted

技术标签:

【中文标题】Karma + Jasmine 下 angular.mock.inject 的 TypeScript AngularJS 控制器测试问题【英文标题】:TypeScript AngularJS controller test issue with angular.mock.inject under Karma + Jasmine 【发布时间】:2016-09-13 15:40:18 【问题描述】:

我正在尝试使用 Jasmine + Karma 测试用 TypeScript 编写的 AngularJS 1 控制器。但是我一直遇到一个我不知道如何解决的错误。错误非常难以描述:

PhantomJS 2.1.1 (Windows 8 0.0.0) 登录控制器应该有文本” 失败的 forEach@/bower_components/angular/angular.js:341:24 loadModules@/bower_components/angular/angular.js:4456:12 createInjector@/bower_components/angular/angular.js:4381:22 workFn@/bower_components/angular-mocks/angular-mocks.js:2507:60 /bower_components/angular/angular.js:4496:53 forEach@/bower_components/angular/angular.js:341:24 loadModules@/bower_components/angular/angular.js:4456:12 createInjector@/bower_components/angular/angular.js:4381:22 workFn@/bower_components/angular-mocks/angular-mocks.js:2507:60 /bower_components/angular/angular.js:4496:53 PhantomJS 2.1.1(Windows 8 0.0.0):执行 1 of 1(1 FAILED)错误(0.019 秒 / 0.015 秒)

这是我的代码,请注意它并没有真正做任何事情。 angular.mocks.inject 方法似乎失败了,因为当我将其注释掉并添加一些非常基本的测试时它可以工作。

describe("Login Controller", () => 
    var controller: App.Login.LoginController;

    beforeEach(angular.mock.module("app.pages.auth.login"));

    beforeEach(angular.mock.module($provide => 
        $provide.value("$window", );
    ));

    // I can get to here ok but this line below fails with the error above
    // Note I have also tried putting $rootScope back in but to no avail
    beforeEach(angular.mock.inject((/*$rootScope, $state, $http, $mdToast, $window, $log*/) => 
        console.log("test");
    ));

我已经检查过了,我肯定在我的文件列表中包含了angular-mocks.js(尽管在我的依赖项列表的末尾附近)。如果它有任何不同,我使用wiredep 来计算我的依赖关系。

【问题讨论】:

可能没有帮助,但请尝试不使用 angular.mockinject(() => )。这就是我所做的——使用打字稿和所有。 【参考方案1】:

我刚刚遇到了同样的错误,最后我设法通过导入在我的 test.ts 文件顶部创建模块的 .ts 文件来修复它。您收到此错误是因为未导入定义“app.pages.auth.login”模块的 .ts 文件。

(是的,错误消息在解决这个问题时根本没有帮助。)

【讨论】:

以上是关于Karma + Jasmine 下 angular.mock.inject 的 TypeScript AngularJS 控制器测试问题的主要内容,如果未能解决你的问题,请参考以下文章

Angular Karma Jasmine 错误:非法状态:无法加载指令摘要

使用 Angular 和 Jasmine/Karma 的私有方法进行测试和代码覆盖

Angular2材料'md-icon'不是Karma / Jasmine的已知元素

模拟指令以测试组件 - Angular 8 与 jasmine 和 Karma

使用 Karma Jasmine 的 Angular 1.5 组件模板单元测试

未捕获的类型错误:无法读取未定义抛出的属性“coSearchCriteria” - Angular Karma/Jasmine