Karma 测试在 chrome 中失败,但在 phantomjs 中通过
Karma tests fail in chrome but pass in phantomjs
我已经为此苦苦挣扎了一段时间,似乎找不到正确的解决方案,
我正在 运行 一个使用 angular 2 测试环境的 ionic 2 项目,当我 运行 使用 karmas chrome 启动器进行 ng 测试时,我得到以下错误:
开始:
07 12 2016 11:20:50.590:INFO [karma]: Karma v1.2.0 服务器启动于 http://localhost:8888/
07 12 2016 11:20:50.591:INFO [launcher]: 以无限并发启动浏览器 Chrome
07 12 2016 11:20:50.682:信息 [启动器]:启动浏览器 Chrome
07 12 2016 11:20:52.993:INFO [Chrome 55.0.2883 (Linux 0.0.0)]: 已连接到 socket /#wi3gg8nwMc27F0H4AAAA,ID 为 3728337
在 0.002 秒/0 秒内完成
总结:
✔ 0 个测试已完成
但是当使用 PhantomJS 时所有测试 运行 完美。
我的系统 运行ning 是:
- Linux ubuntu 16.04LT
- 节点:6.9.2
- Npm: 3.10.8
我已经尝试重新安装所有模块,我已经重新安装了 OS,我已经在另一个 linux 系统上安装了项目并且它在相同的环境下完美运行
我的karma.conf.js文件如下
module.exports = 功能(配置){
config.set({
basePath: '../',
框架:['jasmine', 'angular-cli'],
插件:[
要求('karma-jasmine'),
要求('karma-chrome-launcher'),
要求('karma-phantomjs-launcher'),
要求('karma-remap-istanbul'),
要求('karma-mocha-reporter'),
要求('angular-cli/plugins/karma')
],
文件:[
{ pattern: './src/test.ts', watched: false }
],
预处理器:{
'./src/test.ts': ['angular-cli']
},
重新映射伊斯坦布尔记者:{
报告:{
html: 'coverage',
lcovonly:'coverage/coverage.lcov'
}
},
angular客户端:{
配置:'./angular-cli.json',
环境:'dev'
},
记者:【
'mocha'、'karma-remap-istanbul'
],
自定义启动器:{
Chrome_travis_ci:{
基地:'Chrome',
标志:['--no-sandbox']
}
},
端口:8888,
颜色:真实,
日志级别:config.LOG_INFO,
自动手表:真,
浏览器无活动超时:40000,
浏览器:['Chrome'],
单次运行:假
});
};
我的test.ts文件如下:
导入'./polyfills.ts';
导入 'zone.js/dist/long-stack-trace-zone';
导入 'zone.js/dist/proxy.js';
导入 'zone.js/dist/sync-test';
导入 'zone.js/dist/jasmine-patch';
导入 'zone.js/dist/async-test';
导入 'zone.js/dist/fake-async-test';
从'@angular/core/testing'导入{TestBed};
从 '@angular/forms' 导入 { FormsModule, ReactiveFormsModule };
从 'ionic-angular' 导入 { App、Config、Form、IonicModule、Keyboard、MenuController、NavController、Platform };
从'./test/mock'导入{ConfigMock};
// 不幸的是,`__karma__` 变量没有输入。只需将其声明为任何即可。
声明 var __karma__: any;
声明 var require: any;
// 防止 Karma 过早 运行ning。
__karma__.loaded = (): any => { /* 无操作 */};
Promise.all([
System.import('@angular/core/testing'),
System.import('@angular/platform-browser-dynamic/testing'),
])
// 首先,初始化 Angular 测试环境。
.then(([testing, testingBrowser]) => {
testing.getTestBed().initTestEnvironment(
testingBrowser.BrowserDynamicTestingModule,
testingBrowser.platformBrowserDynamicTesting()
);
})
// 然后我们找到所有的测试。
.then(() => require.context('./', true, /\.spec\.ts/))
// 并加载模块。
.then(context => context.keys().map(context))
// 最后,启动 Karma 以进行 运行 测试。
.then(__karma__.start, __karma__.error);
导出 class TestUtils {
public static beforeEachCompiler(components: Array): Promise {
return TestUtils.configureIonicTestingModule(组件)
.compileComponents().then(() => {
让 fixture: any = TestBed.createComponent(components[0]);
return{
固定装置,
实例:fixture.debugElement.componentInstance,
};
});
}
public static configureIonicTestingModule(components: Array): typeof TestBed {
return TestBed.configureTestingModule({
声明:[
...成分,
],
进口:[
表单模块,
离子模块,
反应形式模块,
],
供应商:[
{provide: App, useClass: ConfigMock},
{提供:配置,使用类:ConfigMock},
形式,
{提供:键盘,useClass:ConfigMock},
{提供:MenuController,useClass:ConfigMock},
{provide: NavController, useClass: ConfigMock},
{提供:平台,使用类:ConfigMock},
{提供:配置,使用类:ConfigMock},
],
});
}
//
public static eventFire(el: any, etype: string): void {
如果(el.fireEvent){
el.fireEvent('on' + etype);
} 别的 {
让 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 文件。
我已经为此苦苦挣扎了一段时间,似乎找不到正确的解决方案,
我正在 运行 一个使用 angular 2 测试环境的 ionic 2 项目,当我 运行 使用 karmas chrome 启动器进行 ng 测试时,我得到以下错误:
开始:
07 12 2016 11:20:50.590:INFO [karma]: Karma v1.2.0 服务器启动于 http://localhost:8888/ 07 12 2016 11:20:50.591:INFO [launcher]: 以无限并发启动浏览器 Chrome 07 12 2016 11:20:50.682:信息 [启动器]:启动浏览器 Chrome 07 12 2016 11:20:52.993:INFO [Chrome 55.0.2883 (Linux 0.0.0)]: 已连接到 socket /#wi3gg8nwMc27F0H4AAAA,ID 为 3728337
在 0.002 秒/0 秒内完成
总结: ✔ 0 个测试已完成
但是当使用 PhantomJS 时所有测试 运行 完美。
我的系统 运行ning 是:
- Linux ubuntu 16.04LT
- 节点:6.9.2
- Npm: 3.10.8
我已经尝试重新安装所有模块,我已经重新安装了 OS,我已经在另一个 linux 系统上安装了项目并且它在相同的环境下完美运行
我的karma.conf.js文件如下
module.exports = 功能(配置){ config.set({ basePath: '../', 框架:['jasmine', 'angular-cli'], 插件:[ 要求('karma-jasmine'), 要求('karma-chrome-launcher'), 要求('karma-phantomjs-launcher'), 要求('karma-remap-istanbul'), 要求('karma-mocha-reporter'), 要求('angular-cli/plugins/karma') ], 文件:[ { pattern: './src/test.ts', watched: false } ], 预处理器:{ './src/test.ts': ['angular-cli'] }, 重新映射伊斯坦布尔记者:{ 报告:{ html: 'coverage', lcovonly:'coverage/coverage.lcov' } }, angular客户端:{ 配置:'./angular-cli.json', 环境:'dev' }, 记者:【 'mocha'、'karma-remap-istanbul' ], 自定义启动器:{ Chrome_travis_ci:{ 基地:'Chrome', 标志:['--no-sandbox'] } }, 端口:8888, 颜色:真实, 日志级别:config.LOG_INFO, 自动手表:真, 浏览器无活动超时:40000, 浏览器:['Chrome'], 单次运行:假 }); };
我的test.ts文件如下:
导入'./polyfills.ts'; 导入 'zone.js/dist/long-stack-trace-zone'; 导入 'zone.js/dist/proxy.js'; 导入 'zone.js/dist/sync-test'; 导入 'zone.js/dist/jasmine-patch'; 导入 'zone.js/dist/async-test'; 导入 'zone.js/dist/fake-async-test'; 从'@angular/core/testing'导入{TestBed}; 从 '@angular/forms' 导入 { FormsModule, ReactiveFormsModule }; 从 'ionic-angular' 导入 { App、Config、Form、IonicModule、Keyboard、MenuController、NavController、Platform }; 从'./test/mock'导入{ConfigMock}; // 不幸的是,`__karma__` 变量没有输入。只需将其声明为任何即可。 声明 var __karma__: any; 声明 var require: any; // 防止 Karma 过早 运行ning。 __karma__.loaded = (): any => { /* 无操作 */}; Promise.all([ System.import('@angular/core/testing'), System.import('@angular/platform-browser-dynamic/testing'), ]) // 首先,初始化 Angular 测试环境。 .then(([testing, testingBrowser]) => { testing.getTestBed().initTestEnvironment( testingBrowser.BrowserDynamicTestingModule, testingBrowser.platformBrowserDynamicTesting() ); }) // 然后我们找到所有的测试。 .then(() => require.context('./', true, /\.spec\.ts/)) // 并加载模块。 .then(context => context.keys().map(context)) // 最后,启动 Karma 以进行 运行 测试。 .then(__karma__.start, __karma__.error); 导出 class TestUtils { public static beforeEachCompiler(components: Array): Promise { return TestUtils.configureIonicTestingModule(组件) .compileComponents().then(() => { 让 fixture: any = TestBed.createComponent(components[0]); return{ 固定装置, 实例:fixture.debugElement.componentInstance, }; }); } public static configureIonicTestingModule(components: Array): typeof TestBed { return TestBed.configureTestingModule({ 声明:[ ...成分, ], 进口:[ 表单模块, 离子模块, 反应形式模块, ], 供应商:[ {provide: App, useClass: ConfigMock}, {提供:配置,使用类:ConfigMock}, 形式, {提供:键盘,useClass:ConfigMock}, {提供:MenuController,useClass:ConfigMock}, {provide: NavController, useClass: ConfigMock}, {提供:平台,使用类:ConfigMock}, {提供:配置,使用类:ConfigMock}, ], }); } // public static eventFire(el: any, etype: string): void { 如果(el.fireEvent){ el.fireEvent('on' + etype); } 别的 { 让 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 文件。