- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 nyc 获取覆盖率报告,如果我不使用 cross-env 插件,它会很好地工作。
cross-env NODE_ENV=test nyc mocha --ui bdd --reporter spec --colors --require babel-core/register tests --recursive
执行此命令代码覆盖将无法正常运行,结果如下:
31 passing (1s)
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 0 | 0 | 0 | 0 | |
----------|----------|----------|----------|----------|-------------------|
但是,如果我运行此 nyc mocha --ui bdd --reporter spec --colors --require babel-core/register tests --recursive
,它将按预期工作。
---------------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
---------------------|----------|----------|----------|----------|-------------------|
All files | 79.45 | 64.29 | 35.71 | 84.62 | |
constants | 100 | 100 | 100 | 100 | |
index.js | 100 | 100 | 100 | 100 | |
db | 77.05 | 64.29 | 33.33 | 83.02 | |
---------------------|----------|----------|----------|----------|-------------------|
问题是我需要设置 env 变量才能使用允许我正确运行测试的 rewire 插件(事实上,大多数测试都因此失败)。
这是我的.bebelrc
{
"presets": ["es2015"],
"env": {
"test": {
"plugins": ["istanbul", "babel-plugin-rewire"]
}
}
}
注意:我认为这个问题与 babel-plugin-rewire 有关。事实上,即使删除 cross-env 并将插件集合放在根目录中,我也会得到相同的空覆盖结果。
最佳答案
我在 babel 配置文件和插件中找到了解决这个问题的方法。为避免这种情况,最好使用最后一个环境预设。我也是created a repo重现错误并具有类似于这篇文章的自述文件。
使用默认命令(使用 rewire 和 cross-env)运行测试将生成一个空的覆盖率报告:
npm run test
这个命令将只执行测试并且它们都将通过
npm run test:cov
这将执行之前的test
脚本,但会添加覆盖率报告,结果为空
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 0 | 0 | 0 | 0 | |
----------|----------|----------|----------|----------|-------------------|
从测试脚本中删除 cross-env NODE_ENV=test
将避免加载重新布线并生成正确的覆盖率。副作用是使用 rewire 的测试会失败。
npm run test2
将在没有 cross-env
的情况下运行脚本,因此 babel 将不会加载 rewire 插件,因此一个测试将失败。
npm run test:cov2
此命令将使用前面的 test2
脚本并生成覆盖率。在这种情况下,覆盖率报告将正确生成。
------------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
------------------|----------|----------|----------|----------|-------------------|
All files | 64.29 | 100 | 54.55 | 66.67 | |
src | 75 | 100 | 60 | 85.71 | |
a-dependency.js | 100 | 100 | 100 | 100 | |
a-module.js | 60 | 100 | 0 | 75 | 6 |
tests | 60 | 100 | 50 | 60 | |
test.js | 60 | 100 | 50 | 60 |... 23,24,26,27,28 |
------------------|----------|----------|----------|----------|-------------------|
但由于缺少 rewire 插件,它不正确。
{
"presets": ["es2015"],
"env": {
"test": {
"plugins": ["istanbul", "rewire"]
}
}
}
这是解决方案中使用的babel配置文件。从插件集合中删除 rewire
插件将生成并清空 npm run test:cov
的覆盖范围,但不会生成 npm run test:cov2
(这是不使用交叉环境)。
如果我这样修改babelrc
{
"presets": ["es2015"],
"plugins": ["istanbul", "rewire"]
}
npm run test:cov
(带交叉环境)和 npm run test:cov2
(不带交叉环境)。将生成空结果。
如果我删除两个插件
{
"presets": ["es2015"]
}
两个命令(有和没有交叉环境)都会生成一个覆盖结果(部分的,因为一个测试会失败)
从插件集合中仅删除 istanbul
将生成一个完整的覆盖文件,这将是结果(如预期的那样)
------------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
------------------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
src | 100 | 100 | 100 | 100 | |
a-dependency.js | 100 | 100 | 100 | 100 | |
a-module.js | 100 | 100 | 100 | 100 | |
tests | 100 | 100 | 100 | 100 | |
test.js | 100 | 100 | 100 | 100 | |
------------------|----------|----------|----------|----------|-------------------|
在围绕之前的 es2015
预设解决了这个问题之后,我转向了 env
预设。使用 npm install babel-preset-env --save-dev
安装它,然后我以这种方式修改了我的 babelrc。
{
"presets": [
["env", {
"targets": {
"node": "current"
}
}]
],
"env": {
"test": {
"plugins": ["istanbul", "rewire"]
}
}
}
在这种情况下,npm run test
正常工作,npm run test:cov
将生成正确的覆盖率报告。并且不会出现跨端或重新布线的问题。
如果在使用 es2015
预设时与 babel 结合使用,rewire 和 cross-env 都会以某种方式产生问题。要使用此预设生成报告显然足以从 babel 插件中删除 istanbul
并仅使用 rewire(在这种情况下它也适用于 cross-env)。
我宁愿建议升级到 env
预设并按照建议使用 babel 插件(除非它会给您的项目带来其他问题)
> node --version
v9.4.0
> npm --version
5.6.0
>ver
Microsoft Windows [Version 10.0.16299.309]
在 MacOS 上观察到相同的行为
关于javascript - 使用 rewire/cross-env 获取覆盖率报告时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49487626/
我正在尝试自己编译跨平台工具链。 当我编译 binutils-2.22 时,它成功了,但为什么会出现“检查我们是否正在交叉编译...否”?我想应该是"is",对吧? 我的主机是运行 ubuntu 的
设置: 有远程测量站,有集中收集/处理/呈现服务器(带有网络服务器),还有观测站,为客户显示收集到的数据。 这些观测站由简单的嵌入式计算机组成,配备网络浏览器,以信息亭模式工作,每个观测站显示来自中央
我对 Spark 和 Scala 很陌生,我正在编写 Spark SQL 代码。我可以在我的逻辑中应用 CROSS JOIN 和 CROSS APPLY。在这里,我将发布必须转换为 Spark SQL
警告是: jquery-1.9.1.js:8526 跨源读取阻止 (CORB) 阻止跨源响应 https://www.metaweather.com/api/location/search/?quer
我正在尝试对用户进行身份验证,但由于Cross-Origin Read Blocking (CORB) blocked 问题我的 login.ts 代码是 if (this.plugins.isOnl
这是我的表格 public class TaskForm extends WebForm { public TaskForm(){ this(new TaskModel());
首先,对不起我的英语语言不好,我是初学者程序员。在我的项目中,我使用线程类,但完成后我看到了这个异常: Cross-thread operation not valid: Control 'lblp4
我目前正在为一个项目开发前端(VueJS),为了测试我的登录和注册逻辑,我使用 laravel 作为后端,尽管我们实际上将使用 springboot 作为后端。我在桌面上编码,一切正常。所以我开始使用
我一直认为,就主要浏览器在不同平台上的渲染而言,唯一的区别是操作系统的底层字体渲染技术,其他一切都依赖于浏览器中包含的相同库。 就我的研究而言,前端开发人员要么相信,要么不相信。似乎我们可以选择任何一
我需要在我正在处理的网站中显示一些交互式(附加 DOM 监听器等和事件处理)矢量图形。 W3C 推荐了 SVG,尽管 Internet Explorer 支持仍然无法识别这种格式,这是必须的(对于公共
子域是否有跨域策略限制? 如果我在 paint.xxxx.com 上有申请这是处理来自 image.xxxx.com 的图像,有没有跨域问题? 我问这些问题,因为我正在考虑在子域上放置一个代理。 最佳
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 6年前关闭。 Improve this questi
一个项目迫在眉睫,我将要编写的一些代码可能会部署在潜在客户碰巧拥有的任何硬件上。它是一个 24/7 全天候运行的业务应用程序,因此我设想大多数主机将是服务器类型的机器,但较小的客户端可能只有一台简单的
首先,我不反对Opera。似乎当我遇到跨浏览器问题并进行一些研究时,总能找到“解决办法”,但是随后我看到一条评论,说我正在查看的跨浏览器解决方案无法在Opera中使用,这是一种愚蠢的评论。 我应该在乎
作为优秀的开发人员,我们尽可能保持我们的代码符合标准,以帮助平台之间的移植。但是有哪些工具可以帮助我们以统一的方式跨多个平台构建代码。 *nix 家族有 make但 Windows 需要 nmake
我目前正在构建浏览器帮助对象。 的事情之一BHO要做的是绕过跨域策略进行跨站请求。 为此,我公开了 __MyBHONameSpace.Request使用 WebClient 的方法内部。 然而,我想到
我开发了一个 NP API 插件并正在使用它。我观察到以下两件事 当我第一次安装插件时,我需要重新启动我的 mac os 以加载插件。 每当我更新插件时,我都需要重新启动浏览器。 我想在不重新启动浏览
浏览器在接收到“足够”的数据后或数据停止流入后呈现内容(例如,达到内容长度)。 我要慢慢地将数据流式传输到浏览器;为此,我必须解决此数据缓存问题。 例如,不是发送 40 字节的 JavaScript,
我搜索了一些关于跨平台编程开发的文献,但没有找到真正好的东西。 我不是在寻找像 Java 那样的跨平台虚拟机。 有没有关于这方面的书籍或文献? 最佳答案 我会说这归结为: 不使用非标准的“标准库”功能
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 7年前关闭。 Improve t
我是一名优秀的程序员,十分优秀!