【问题标题】:Angularjs error while testing typescript ang angular with jasmine and karma使用茉莉花和业力测试打字稿角度时出现Angularjs错误
【发布时间】:2015-12-26 23:44:09
【问题描述】:

我想用 Karma 和 Jasmine 测试我的基于 AngularJS 和 TypeScript 的应用程序。

我编辑的controllerSpecs.ts

/// <reference path="../references.ts" />

describe('ConfigCtrl', () => {
var configCtrl, scope;

beforeEach(angular.mock.module('typewritingApp'));

beforeEach(angular.mock.inject(($rootScope) => {
    scope = $rootScope.$new();
    configCtrl = new App.TestCtrl(scope);
}));

it('should be true', () => {
    expect(true).toBe(true);
});
});

我的app.ts

module App {
import TypewritingCtrl = App.TypewritingCtrl;
import MenuCtrl = App.MenuCtrl;
var typescrip: ng.IModule;
var typewritingapp: ng.IModule = angular.module("typewritingApp", ["ngRoute", "ui.bootstrap", "LocalStorageModule", "ui.event", "timer"])
    .controller("TestCtrl", ["$scope", TestCtrl])

}

我的TestController.ts

/// <reference path="../references.ts" />
module App {
export class TestCtrl {
    constructor($scope: ng.IRootScopeService) {

    }
}
}

当我尝试运行测试时,业力写给我的错误:

Firefox 41.0.0 (Windows 10 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.089 secs / 0.119 secs)
29 09 2015 14:58:55.573:INFO [watcher]: Changed file "PROJECT_PATH/Specs/controllerSpecs.js".
Firefox 41.0.0 (Windows 10 0.0.0) ConfigCtrl should be true FAILED
    minErr/<@PROJECT_PATH/Scripts/angular.js:68:12
    loadModules/<@PROJECT_PATH/Scripts/angular.js:4411:15
    forEach@PROJECT_PATH/Scripts/angular.js:336:11
    loadModules@PROJECT_PATH/Scripts/angular.js:4372:5
    createInjector@PROJECT_PATH/Scripts/angular.js:4297:11
    workFn@PROJECT_PATH/Scripts/angular-mocks.js:2427:44
    env.executeFiltered@PROJECT_PATH/Specs/node_modules/karma-jasmine/lib/boot.js:117:7
    createStartFn/<@PROJECT_PATH/Specs/node_modules/karma-jasmine/lib/adapter.js:171:5
    [2]</Karma/this.loaded@http://localhost:9876/karma.js:190:7
    @http://localhost:9876/context.html:52:5

Firefox 41.0.0 (Windows 10 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.255 secs / 0.103 secs)

如果我从我的代码中删除注入部分,它会成功运行并且测试通过。谁能帮助我做错了什么?

【问题讨论】:

    标签: javascript angularjs typescript jasmine karma-runner


    【解决方案1】:

    我们应该请求服务 $rootScope 作为本地 $scope 生成器:

    // beforeEach(angular.mock.inject(($scope) => {
    beforeEach(angular.mock.inject(($rootScope) =>
    {
        // HERE we do create a $scope from $rootScope
        scope = $rootScope.$new();
        configCtrl = new App.TestCtrl(scope);
    }));
    

    【讨论】:

    • 感谢@RadimKöhler 的回答,我已经更改了代码,但仍然收到相同的错误。
    • 我在本地复制了您的代码,它对我有用。我只是简化了您的模块.module("typewritingApp", []) 并实现了空TestCtrl。测试通过...
    • 那我不明白。我已经通过 NuGet 包管理器this 示例添加了所有 de js 和 d.ts 文件也运行良好。这就是我的业力配置的样子 link
    • 很难说,对不起。但是在您的业力文件中,我没有看到 app.js 或 TestController.js(因为您确实调用了 new TestCtrl)...
    • 感谢@RadimKöhler。这都是我的错。我没有将源文件添加到我的配置文件中,只有测试和脚本文件......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2017-01-15
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多