当前位置: 首页 > 知识库问答 >
问题:

角度模块仅在测试时执行两次

丁德义
2023-03-14

我的角应用程序正常运行时工作正常,但在我进行单元测试时似乎执行了两次(使用Karma

它的实例化如下:

require('./app.js');

var app = document.URL.indexOf( 'http://' ) === -1 && document.URL.indexOf( 'https://' ) === -1;

if ( app ) {
    console.log('App running on a mobile device');
    document.addEventListener("deviceready", function(){
        angular.bootstrap(document, ['esme']);
    });
} else {
    console.log("App running in a browser");
    angular.element(document).ready(function() {
        angular.bootstrap(document, ['esme']);
    });
}
var esme = angular.module('esme', ['ui.router', 'ngAnimate', 'ngTouch', 'DataStore', 'angular-carousel', 'SessionParams', 'hmTouchEvents']);

esme.run(['$location', '$rootScope', '$state', 'NotificationManager', function($location, $rootScope, $state, NotificationManager) {
    console.log('run');

    NotificationManager.init();

    $rootScope.$on('$locationChangeSuccess', function (event, current, previous) {
        if($state.current.data)
            $rootScope.title = $state.current.data.title;
    });
}]);
describe('TestController', function() {
    var $controller;
    var $rootScope;

    beforeEach(module('esme'));

    beforeEach(module(function($urlRouterProvider) {
        $urlRouterProvider.deferIntercept();
    }));

    beforeEach(inject(function(_$controller_, _$rootScope_){
        // The injector unwraps the underscores (_) from around the parameter names when matching
        $controller = _$controller_;
        $rootScope = _$rootScope_.$new();
    }));

    describe('$scope.cheer', function() {
        var $scope, controller;

        beforeEach(function() {
            $scope = $rootScope;
            controller = $controller('Main', { $scope: $scope });
        });

        describe("#hello()", function(){
            it('ensures hello is correct', function() {
                $scope.test.should.equal('test');
            });
        });
    });
});

浏览器控制台的输出如下:

“在浏览器中运行的应用程序”

"配置"

“运行”

但是单元测试的输出如下:

INFO [karma]: Karma v0.12.31 服务器在 http://localhost:9876/ 启动

[..因果报应/幻觉之类的..]

日志:“在浏览器中运行的应用程序”

WARN[we B- server]:404:/views/Main/log in . html

日志:“配置”

日志:运行

日志:“配置”

日志:“运行”

幻像1.9.8 (Windows 7):已成功执行1/1(0.007秒/ 0.001秒)

WARN[we B- server]:404:/views/Main/log in . html

[17:16:14]5.31秒后完成“测试:单元”

我仍然在学习如何模拟一个angular应用程序,所以我坚信我在测试文件中犯了一些明显的错误。你能帮我找到他们并解释为什么会发生这种行为吗?

我现在可能有的唯一线索来自Angular的文档,我应该声明一个仅用于运行应用程序的模块吗?:

run blocks——在创建注射器后执行,用于启动应用程序。只有实例和常量可以注入到运行块中。这是为了防止在应用程序运行时进一步配置系统。

运行块是Angular中最接近main方法的东西。运行块是启动应用程序所需运行的代码。它是在所有服务都已配置并创建注入器后执行的。运行块通常包含难以进行单元测试的代码,因此应在隔离模块中声明,以便在单元测试中可以忽略它们。

谢谢你的帮助!

共有1个答案

南宫俊喆
2023-03-14

经过一个美好的夜晚,答案很简单...

因为我正在做手动引导,在我的karma.conf文件中,我只是简单地排除了它完成的文件。

files: [
    'lib/angular-mocks/angular-mocks.js',
    'src/js/**/*.js',
    'test/test.js'
],

// list of files to exclude
exclude: [
    'src/js/bootstrap.js'
],
 类似资料:
  • 问题内容: 我知道这个问题已经被问过很多次了,而且我知道在大多数情况下人们会丢失文件。 我遇到了同样的问题,试图在模块上测试工厂。不幸的是,我一直遇到测试方面的问题(为什么要使用Angular,为什么要假设和对象?),未定义模块的状态。我很茫然。我也尝试过使用angular.mocks.module,但随后收到一条消息,提示未定义Angular。我究竟做错了什么? 值得注意的是,我正在使用gulp

  • 我正在尝试测试我的角度4.1.0组件- 然而,一个简单的“应该创建”测试抛出了这个神秘的错误... NetworkError:未能对“XMLHttpRequest”执行“send”:未能加载“ng:///DynamicTestModule/module.ngfactory.js”。 所以我发现了这个问题,这表明问题是组件有 参数未设置,但是,如果我像这样修改我的测试: 同样,如果我从组件中移除<

  • 我有maven surefire插件pom.xml: 现在我希望maven只在部署目标上执行测试,因此: 当执行mvn部署测试应该运行 当执行mvn包或mvn安装时,测试不应该运行,因为目标在部署之前

  • 以下步骤将演示如何执行速度测试: 使用第10章EAP作为指南安装和配置JRadius Simulator。 通过增加请求线程和每线程请求的值来测试FreeRADIUS的响应时间,观察FreeRADIUS达到饱和点的值。 测试在FreeRADIUS服务器上完成典型事务的持续时间。 例如,如果您是Eduroam的一部分,您可以记录您支持的各种EAP方法的持续时间。 您还可以测试计费请求的速度。 刚刚发

  • 问题内容: 将模块插入项目后,如何在该模块中运行测试用例? 即我做了: 然后尝试测试其中的内容: 我们是否应该单独检查模块并进行测试?我不知道该怎么办。看来,当我知道如何找到已获取的模块时,但是当我使用它时,它在路径中“找不到”。 问题答案: 需要包,而不是相对于的文件夹。 因此,省略开头和结尾的文件名,它将起作用: 如果当前目录是您要测试的软件包文件夹,您甚至可以忽略它,例如 作为参考,请参阅C

  • 我在Angular 4中创建了一些测试。我有一个组件正在使用PrettyJsonCompont,以便向用户显示格式良好的json。 当我运行ng test时,我的几个组件测试以相同的消息失败。 失败:类型PrettyJsonComponent是两个模块声明的一部分:PrettyJsonModule和DynamicTestModule!请考虑将PrettyJsonComponent移动到导入Pret