angular - Angular Karma 测试的自定义 context.html
问题描述
我需要修改debug.html
和context.html
karma 测试,以便在 angular 中运行 karma 测试时将所需的脚本导入到 html 头中ng t
。
当前在<head>
of中导入一个库index.html
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
<script src="aframe-v1.0.0.min.js"></script>
</head>
<body>
<app-root></app-root>
</body>
</html>
该库包含在angular.json
:
"scripts": [
{
"input": "node_modules/aframe/dist/aframe-v1.0.0.min.js",
"inject": false,
"bundleName": "aframe-v1.0.0.min"
}
]
Angular 业力测试会覆盖karma.config.js
,因此预期的覆盖customContextFile
不起作用,因为它被 Angular 覆盖。
在angular.json
's"test"
部分中,脚本似乎对测试也没有影响。
"scripts": [
"node_modules/aframe/dist/aframe-v1.0.0.min.js"
],
无论如何,测试环境都会不一致,因为测试的导入将发生在身体上,而不是头部。
解决方案
业力的.html
文件位于:
node_modules\@angular-devkit\build-angular\src\angular-cli-files\plugins\karma-context.html
node_modules\@angular-devkit\build-angular\src\angular-cli-files\plugins\karma-debug.html
一旦此处包含 A-Frame 的导入 ( karma-context.html
),那么您的单元测试将包含 A-Frame 并正常运行:
// karma-context.html
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
<script src="https://aframe.io/releases/1.0.1/aframe.min.js"></script>
</head>
我们可以通过创建您自己的karma-context.html
和karma-debug.html
. 在目录下,为包含 A-Frame 导入的scripts
两个文件分别创建一个副本。在您的文件夹中html
保留karma-context.html
和karma-debug.html
未修改。node_modules
当您的项目被克隆时,内部的更改不会传播,因此我们的修改需要存在于其他地方。
创建一个脚本,html
在 karma 运行时将修改后的内容复制到 node_module 中:
// scripts/karma-copy.test.js
const fs = require('fs');
// Modify karma-context.html
fs.copyFile(
'src/scripts/karma-context.html',
'node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/karma-context.html',
(err) => {
if (err) throw err;
}
);
// Modify karma-debug.html
fs.copyFile(
'src/scripts/karma-debug.html',
'node_modules/@angular-devkit/build-angular/src/angular-cli-files/plugins/karma-debug.html',
(err) => {
if (err) throw err;
}
);
将脚本包含在karma.config.js
:
plugins: [
require('../src/scripts/karma-copy.test.js'),
...
],
现在,当您关闭项目时,ng t
将在<head>
.
推荐阅读
- javascript - 如何接收连续的视频块作为 blob 数组并在 Websocket 中动态设置为视频标签
- javascript - 正确 this.state 中的变量语法
- codeigniter - 如何从 CodeIgniter 中的表中删除行?
- pandas - 多个数据帧之间的多个条件检查和过滤
- angular - 使用 Angular 6 设置输入字段的值
- laravel - 试图从数据库返回视图但得到 -“未定义的变量错误 - Laravel 5.2”
- javascript - SmartAdmin 模板页面功能运行两次 Bug
- android - 更改后端密码时注销用户
- angular - 如何在 Ionic 中为 chart.js 启用水平滚动
- javascript - 如何在使用 Google protobuf 时调用困在“System.register()”模块中的 javascript 函数(从 typescript 生成)?