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

因果报应测试在chrome中失败但在phantomjs中通过

娄鹤轩
2023-03-14

我已经在这个问题上苦苦挣扎了一段时间,似乎找不到正确的解决办法,

我正在运行一个使用angular 2的测试环境的Ionic2项目,当我使用karmas chrome launcher运行ng测试时,我得到以下错误:

开始:

07 12 201 6 11:20:50.590:Info[karma]:karma v1.2.0服务器启动于http://localhost:8888/07 12 201 6 11:20:50.591:Info[launcher]:以无限并发启动浏览器Chrome 07 12 201 6 11:20:50.682:Info[launcher]:启动浏览器Chrome 07 12 201 6 11:20:52.993:Info[Chrome 55.0.2883(Linux 0.0.0)]:连接在套接字/#wi3gg8nwmc27f0h4aaaa上,id为3728337

在0.002秒/0秒内完成

摘要:✔0测试已完成

但是当使用PhantomJS时,所有测试都运行得很好。

我正在运行的系统是:

  • Linux ubuntu 16.04 LT
  • 节点:6.9.2
  • NPM:3.10.8

我试着重新安装了所有模块,我重新安装了OS,我在另一个linux系统上安装了project,它在相同的环境下工作得很好

我的karma.conf.js文件如下


    module.exports = function (config) {
        config.set({
            basePath: '../',
            frameworks: ['jasmine', 'angular-cli'],
            plugins: [
                require('karma-jasmine'),
                require('karma-chrome-launcher'),
                require('karma-phantomjs-launcher'),
                require('karma-remap-istanbul'),
                require('karma-mocha-reporter'),
                require('angular-cli/plugins/karma')
            ],
            files: [
                { pattern: './src/test.ts', watched: false }
            ],
            preprocessors: {
                './src/test.ts': ['angular-cli']
            },
            remapIstanbulReporter: {
                reports: {
                    html: 'coverage',
                    lcovonly: 'coverage/coverage.lcov'
                }
            },
            angularCli: {
                config: './angular-cli.json',
                environment: 'dev'
            },
            reporters: [
                'mocha', 'karma-remap-istanbul'
            ],
            customLaunchers: {
                Chrome_travis_ci: {
                    base: 'Chrome',
                    flags: ['--no-sandbox']
                }
            },
            port: 8888,
            colors: true,
            logLevel: config.LOG_INFO,
            autoWatch: true,
            browserNoActivityTimeout: 40000,
            browsers: ['Chrome'],
            singleRun: false
        });
    };

我的test.ts文件如下所示:


    import './polyfills.ts';

    import 'zone.js/dist/long-stack-trace-zone';
    import 'zone.js/dist/proxy.js';
    import 'zone.js/dist/sync-test';
    import 'zone.js/dist/jasmine-patch';
    import 'zone.js/dist/async-test';
    import 'zone.js/dist/fake-async-test';

    import { TestBed } from '@angular/core/testing';
    import { FormsModule, ReactiveFormsModule } from '@angular/forms';
    import { App, Config, Form, IonicModule, Keyboard, MenuController, NavController, Platform }  from 'ionic-angular';

    import { ConfigMock } from './test/mock';

    // Unfortunately there's no typing for the `__karma__` variable. Just declare it as any.
    declare var __karma__: any;
    declare var require: any;

    // Prevent Karma from running prematurely.
    __karma__.loaded = (): any => { /* no op */};

    Promise.all([
        System.import('@angular/core/testing'),
        System.import('@angular/platform-browser-dynamic/testing'),
    ])
    // First, initialize the Angular testing environment.
        .then(([testing, testingBrowser]) => {
            testing.getTestBed().initTestEnvironment(
                testingBrowser.BrowserDynamicTestingModule,
                testingBrowser.platformBrowserDynamicTesting()
            );
        })
        // Then we find all the tests.
        .then(() => require.context('./', true, /\.spec\.ts/))
        // And load the modules.
        .then(context => context.keys().map(context))
        // Finally, start Karma to run the tests.
        .then(__karma__.start, __karma__.error);

    export class TestUtils {

        public static beforeEachCompiler(components: Array): Promise {
            return TestUtils.configureIonicTestingModule(components)
                .compileComponents().then(() => {
                    let fixture: any = TestBed.createComponent(components[0]);
                    return {
                        fixture,
                        instance: fixture.debugElement.componentInstance,
                    };
                });
        }

        public static configureIonicTestingModule(components: Array): typeof TestBed {
            return TestBed.configureTestingModule({
                declarations: [
                    ...components,
                ],
                imports: [
                    FormsModule,
                    IonicModule,
                    ReactiveFormsModule,
                ],
                providers: [
                    {provide: App, useClass: ConfigMock},
                    {provide: Config, useClass: ConfigMock},
                    Form,
                    {provide: Keyboard, useClass: ConfigMock},
                    {provide: MenuController, useClass: ConfigMock},
                    {provide: NavController, useClass: ConfigMock},
                    {provide: Platform, useClass: ConfigMock},
                    {provide: Config, useClass: ConfigMock},
                ],
            });
        }

        // http://stackoverflow.com/questions/2705583/how-to-simulate-a-click-with-javascript
        public static eventFire(el: any, etype: string): void {
            if (el.fireEvent) {
                el.fireEvent('on' + etype);
            } else {
                let evObj: any = document.createEvent('Events');
                evObj.initEvent(etype, true, false);
                el.dispatchEvent(evObj);
            }
        }
    }

如有任何帮助或指导,我将不胜感激

共有1个答案

闻人宏盛
2023-03-14

所以我找到了答案,如果有人有同样的问题,似乎我的Chrome浏览器更新到了版本55.0.2883.75(64位),这导致了我正在编写的Angular 2 Typescript应用程序的一个错误,我通过添加

mime: {
    'text/x-typescript': ['ts','tsx']
},

到我的karma.conf.js文件中。

 类似资料:
  • 问题内容: 我已经使用JUnit 4和spring-test库编写了一些JUnit测试。当我在Eclipse中运行测试时,可以正常运行并通过。但是,当我使用Maven运行它们(在构建过程中)时,它们无法给出与Spring相关的错误。我不确定是什么引起了问题,JUnit,Surefire或Spring。这是我的测试代码,spring配置以及从Maven获得的异常: PersonServiceTest

  • 我的Junit测试使用DBUnit,从Eclipse运行时运行良好。但是,使用Maven运行相同的测试会导致以下一项测试失败: 我已经连续几次尝试从EclipseGUI(“作为JUnit测试运行”)运行该测试和整个测试集,但它们从未失败——但从Maven来看,它们确实失败了。 我对每个测试都使用@数据库设置,但这足以真正重置数据库吗?我还认为Maven可能会并行运行测试,所以我尝试在pom.xml

  • 我按照cypress在他们的文档中推荐的方式编写测试,即每个测试有多个断言,但是用这种方式编写测试时会出现一个问题,那就是如果断言失败,测试执行就会停止。 我希望每个测试有多个断言,如果其中一个失败,测试将失败,但将继续测试执行,所以在最后,我将能够看到测试中失败的所有断言,而不仅仅是第一个失败的断言。 提前感谢!

  • 我正在使用C#Selenium进行自动测试,在最新的chromedriver更新89.0.4389.2300之后,Google chrome立即启动并崩溃。最奇怪的是,当我在本地运行它时,一切正常,但我也在使用Azure管道在服务器上运行测试。服务器给了我: OpenQA。硒。WebDriverException:未知错误:Chrome无法启动:崩溃。(未知错误:DevToolsActivePor

  • 我正在使用Angular2 final(2.0.2)和angular cli。我正在尝试将其设置为使用PhantomJS运行单元测试。使用Chrome和karma Chrome launcher运行规范-所有测试都通过。在Phantomjs预构建2.1中运行相同的功能。13和karma phantomjs launcher 1.0。2次测试失败。 我添加了phantomjs启动器到插件数组中kar

  • 我对Jest是新手,目前只是在玩一些现有功能的测试。我有一个函数,它获取一个数据数组(来自JSON文件),并将其映射到特定的位置,绘制点。 这是功能点: plotPoint将JSON数据作为参数。该函数之所以有效,是因为它在控制台中正确记录数据,而其他功能按预期工作。 但测试总是失败: 绘图点。测验js 返回此错误: 我认为可能函数是在jsonfile之前的测试中运行的。json已加载,因此我尝试