使用:

ng test

Angular CLI默认情况下在Chrome中运行测试,这很好,但是如果我需要在仅控制台环境(无头浏览器)中运行它们呢?

另外,如果每次运行时都能指定是否需要减少浏览器,那就太好了,比如:

ng test --browsers MyHeadLessBrowser


Edit:

运行PhantomJS时,我得到了以下信息:

PhantomJS 2.1.1(Linux 0.0.0)错误


引用错误:在http://localhost:9876/_karma_webpack_/vendor.bundle.js中找不到变量:Intl(第49362行)

推荐答案

As a more complete answer based on 100's one, 101's comment and my personal additions.


简单回答:使用无 chromium 合金

你只需使用Headless Chrome:

ng test --browsers ChromeHeadless

您需要使用Chrome 59+.

但是,如果您需要PhantomJS(和/或更改没有参数的默认ng test行为),请阅读以下内容.


更长的答案:使用PhantomJS

EDIT:请注意,PhantomJS项目已经完成了archived,请参见this thread.

Setup

为了能够(可选)使用PhantomJS在没有浏览器的情况下运行测试,您应该:

1) 安装一些依赖项:

npm install --save-dev karma-phantomjs-launcher
npm install --save intl

2) 将PhantomJS添加到Karma的插件列表中

打开karma.conf.js并将require('karma-phantomjs-launcher')添加到plugins数组中,例如:

module.exports = function (config) {
  config.set({
    basePath: '',
    frameworks: ['jasmine', '@angular/cli'],
    plugins: [
      require('karma-jasmine'),
      require('karma-chrome-launcher'),
      require('karma-phantomjs-launcher'),
      // ...
    ],

3) 启用多边形填充

打开src/polyfills.ts文件并取消注释以下行:

BROWSER POLYFILLS

import 'core-js/es6/symbol';
import 'core-js/es6/object';
import 'core-js/es6/function';
import 'core-js/es6/parse-int';
import 'core-js/es6/parse-float';
import 'core-js/es6/number';
import 'core-js/es6/math';
import 'core-js/es6/string';
import 'core-js/es6/date';
import 'core-js/es6/array';
import 'core-js/es6/regexp';
import 'core-js/es6/map';
import 'core-js/es6/weak-map';
import 'core-js/es6/set';

APPLICATION IMPORTS

import 'intl';
import 'intl/locale-data/jsonp/en';

How to run the tests

在运行命令时指定浏览器

否您可以使用Chrome(默认值)运行测试:

ng test --browsers Chrome

或幻影(无头):

ng test --browsers PhantomJS

Changing the default behaviour of just ng test

通过更改karma.conf.jsbrowsers数组的值,可以更改ng test的默认行为(因此,当没有提供--browsers参数时).

现在可以将其设置为仅使用Chrome(默认Angular cli设置):

browsers: ['Chrome'],

PhantomJS:

browsers: ['PhantomJS'],

或者两者兼而有之:

browsers: ['Chrome', 'PhantomJS'],

Angular相关问答推荐

Angular Signal只指一种类型,但这里用作值.ts(2693)''

为什么这个拦截器只在发送事件上触发,而不是在实际响应上触发?

如何将Angular 服务包含在延迟加载的独立组件路由中?

元素上的Angular 管道链接不起作用

如何捕获生命周期方法中抛出的Angular组件错误?

npm install命令在基本Angular 应用程序的天蓝色构建管道中失败

使用forkJoin和mergeMap的正确方式是什么?

从具有特定 node 值的现有数组创建新数组

Nz 树 Select .如何在子 node 中显示父 node 名称?

Angular:为什么在我的自定义 ErrorHandler 中订阅主题不触发?

console.log 返回 api 数据但 ERROR TypeError: Cannot read properties of undefined reading 'name'

错误:在工作区外运行 Angular CLI 时,此命令不可用

ng14中具有强类型表单的FormBuilder

Angular2 CLI 错误@angular/compiler-cli包未正确安装

请求 http.GET 时发送的 Angular2 OPTIONS 方法

未绑定断点 - VS Code | Chrome | Angular

Angular 应用程序必须在新部署后清除缓存

如何使用formControlName和处理嵌套的formGroup?

Angular2/4 中的ng-reflect-*属性有什么作用?

Angular2:CoreModule 与 SharedModule