Karma 测试在 chrome 中失败,但在 phantomjs 中通过

2023-12-06

我已经为此奋斗了一段时间,似乎找不到正确的解决方案,

我正在运行一个使用 Angular 2 测试环境的 ionic 2 项目,当我使用 karmas chrome 启动器运行 ng 测试时,出现以下错误:

START:

07 12 2016 11:20:50.590:INFO [karma]: Karma v1.2.0 服务器启动于http://本地主机:8888/07 12 2016 11:20:50.591:INFO [launcher]: 启动无限并发的 Chrome 浏览器 07 12 2016 11:20:50.682:INFO [启动器]: 启动浏览器 Chrome 2016 年 7 月 12 日 11:20:52.993:INFO [Chrome 55.0.2883 (Linux 0.0.0)]:已连接到套接字 /#wi3gg8nwMc27F0H4AAAA,ID 为 3728337

0.002 秒/0 秒内完成

概括: ✔ 已完成 0 项测试

但是当使用 PhantomJS 时,所有测试都可以完美运行。

我正在运行的系统是:

  • Linux ubuntu 16.04LT
  • NodeJs:6.9.2
  • 新下午:3.10.8

我尝试重新安装所有模块,重新安装操作系统,在另一个 Linux 系统上安装项目,它在相同的环境下完美运行

我的 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);
            }
        }
    }

  

任何帮助或指导将不胜感激


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

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

到我的 karma.conf.js 文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Karma 测试在 chrome 中失败,但在 phantomjs 中通过 的相关文章

随机推荐

  • SAS中有没有一种有效的方法来转置大表

    我有一个 SAS 数据集需要转置 它具有以下形式 id 日期类型 值 我需要把它转换成 id 日期 valueoftype1 valueoftype2 有什么有效的方法可以实现这一点吗 我的数据非常庞大 例如 data one input
  • JQuery设置的文本值回发后丢失

  • Bootstrap Modal 按钮不起作用,仅在 iOS 上

    我的网站上有这个 Bootstrap Modal 它适用于除 Apple iOS 之外的所有内容 有没有人遇到过这个 有任何想法从哪里开始来解决这个问题 我已经尝试使用模拟器进行故障排除 似乎工作正常 只是 Iphone 似乎无法工作 这是
  • 粘贴 (Python) Web 服务器 - 自动重新加载问题

    当我以守护进程模式启动 粘贴 Web 服务器时 它似乎会在源文件的时间戳更新时停止重新加载的能力 这是我启动守护进程的方法 cd project bin paster serve reload daemon development ini
  • COM Interop 和 Outlook - 让 Outlook 可见?

    我正在通过 VB NET 程序自动化 Outlook 根据用户的请求将项目传输到日历和联系人中 一切正常 这不是问题 问题是 当 Outlook 尚未打开时 像这样自动执行 Outlook 会创建一个隐藏实例 我也许可以理解这有什么用处 可
  • MySQL 中前 5 个值的总和

    我有一个 MySQL 表 用于存储赛车锦标赛的结果 因此每一行都包含每个车手在某场比赛中的位置以及其他数据 我想要获得某个车手的前 5 名排名的总和 例如 如果车手的最佳位置是 1 2 2 4 5 我希望 MySQL 返回 14 我想做的是
  • 如何将数据发布到多页谷歌表单?

    我正在尝试通过 POST 自动填写 Google 表单 然而 当我实际将数据发布到其中时 只有第一页的问题实际上被填写了 示例代码 private static void PostToFormTest WebClient client ne
  • 如何在 C# Windows 应用程序中通过计时器控件刷新 Gridview?

    我有一个组合框 在组合框中有多个选项 如 5 秒 10 秒 20 秒等 当我选择任何一个选项时 网格视图会在该特定时间后刷新 以下是在 datagridview 中加载文件的代码 public string Path get set pri
  • 维护滚动位置和回发时的选定控制

    返回另一个基于网络的问题 当控件向服务器发出回发时 页面会刷新 很好 页面也会滚动回顶部并失去所选的控件 如果回发后相关 则根据发生的更改 控件将变得可见或隐藏 即使页面可见性没有任何变化 焦点也会丢失并且当前滚动会重置 在文本字段中输入的
  • 如何立即在网格视图中显示图像的选择

    我有一个问题 我有一个自定义网格视图 其中两个图像 一个是背景图像 第二个是复选标记图像 当我单击网格视图复选标记的一项时 会显示哪个项目显示图像选择 但是当我们想要选择网格视图的第二项 它还会在同一图像上显示复选标记 如下面所附图像所示
  • 在docker容器中安装cygwin时出错:系统找不到指定的路径。 (0x3) error=hcssshim::ImportLayer - 失败 在 Win32 中失败

    我有一个简单的 Dockerfile FROM mcr microsoft com windows 1809 Install chocolatey RUN powershell exe Set ExecutionPolicy Bypass
  • 创建几个相互不兼容的数字类型[重复]

    这个问题在这里已经有答案了 我想创建封装原始数字类型的轻量级类型 struct A long value struct B long value struct C long value 这样我就可以将常用的算术运算应用于每种类型 并获得预期
  • jQGrid - 更改分组标题的背景颜色

    我正在使用 jQGrid 进行分组 每个组标题将具有以下三种可能性之一 Pending Duplicate Not Duplicate 根据该文本 我想更改分组标题的背景颜色 我已经在使用了rowattrjQGrid 的属性来更改网格行的背
  • 使用 NLTK 检查英语语法 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我开始使用NLTK库 我想
  • SpringBeanFacesELResolver 的 javax.faces.el.VariableResolver 类转换异常

    我正在尝试升级到 JSF2 和 Spring 3 0 5 当我部署到 Tomcat 时出现以下错误 任何帮助表示赞赏 SEVERE Exception sending context initialized event to listene
  • 如何使用 PHP 动态发布 ical 文件以供 Google 日历读取?

    任何关于 PHP ical 的 Google 搜索都会带来 phpicalendar 以及如何解析或读取 IN ical 文件 我只想编写一个 PHP 文件 从数据库中提取事件并以 ical 格式写出它们 我的问题是我找不到任何地方可以回答
  • 将 Sorbet RBI 添加到 gem 的目录结构是什么?

    我有一个gem我想添加类型 通过提交 PR 或通过分叉仅在我的项目中使用 但是文档除了创建一个 rbi folder 大声思考 是否应该镜像文件lib 添加了类型签名 或者应该是一个大文件 每个版本 就像中的签名一样冰糕型 我还不知道有任何
  • 如何在 iOS 10+ 中自定义通知的简短预览

    我已经在我的应用程序中实现了基于 iOS 的丰富通知本地和远程通知编程指南 我看了WWDC通知简介 高级通知 and 最佳实践 并阅读UNNotificationContentExtension 所有这些都表明我可以实现通知内容扩展来自定义
  • 无需重定向的 Ajax Django 登录/身份验证

    我正在尝试建立类似于 StackOverflow 的身份验证设置 其中正常浏览永远不会受到影响 除非有一些需要身份验证的特权操作 在此之前不要打扰用户 如果未登录 则应为 登录 如果已登录 则应为 用户名 base html 来自fallr
  • Karma 测试在 chrome 中失败,但在 phantomjs 中通过

    我已经为此奋斗了一段时间 似乎找不到正确的解决方案 我正在运行一个使用 Angular 2 测试环境的 ionic 2 项目 当我使用 karmas chrome 启动器运行 ng 测试时 出现以下错误 START 07 12 2016 1