为啥我的 NYC 代码覆盖范围不适用于 ESM?

Posted

技术标签:

【中文标题】为啥我的 NYC 代码覆盖范围不适用于 ESM?【英文标题】:Why is my NYC Code coverage not working with ESM?为什么我的 NYC 代码覆盖范围不适用于 ESM? 【发布时间】:2021-10-30 13:28:46 【问题描述】:

我有以下代码...

App.mjs

import express from "express";
const port = process.env.PORT || 4000;

class CommunicationsApplication
  constructor() 
    this.app = CommunicationsApplication.getExpress();
    this.app.get('/', (req, res) => 
      res.send('Hello World!')
    )

    this.app.listen(port, () => 
      console.log(`listening at http://localhost:$port`)
    )
  
  static getExpress()
    return express()
  

App.spec.mjs

import CommunicationsApplication from "./App.mjs";
import sinon from "sinon";
import expect from "chai";

it('Testing to see if test works', () => 
  const result = 
    get: sinon.fake(),
    listen: sinon.fake()
  
  sinon.stub(CommunicationsApplication, 'getExpress').callsFake(()=>result)
  new CommunicationsApplication();
  expect(result.get.callCount).to.eq(1);
  expect(result.listen.callCount).to.eq(1);
)

package.json

"type": "module",
...
"test": "nyc mocha --recursive './lib/**/*.spec.mjs' --require esm"

但是当我跑步时,我看到...

  ✔ Testing to see if test works

为什么我的代码覆盖率不起作用?

  1 passing (4ms)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |       0 |        0 |       0 |       0 |                   
----------|---------|----------|---------|---------|-------------------

【问题讨论】:

【参考方案1】:

不会接受这个答案,但这确实有效......

"test": "c8 mocha --recursive './lib/**/*.spec.mjs' --require esm"

【讨论】:

【参考方案2】:

NYC 尚不支持 Node 原生 ESM。见https://github.com/istanbuljs/nyc/issues/1287

【讨论】:

以上是关于为啥我的 NYC 代码覆盖范围不适用于 ESM?的主要内容,如果未能解决你的问题,请参考以下文章

Swagger-JSdoc 不适用于 Node.JS 14.15.4 错误“ERR_REQUIRE_ESM”

nyc (istanbul) 从覆盖率报告中排除测试代码

为啥我的代码不适用于较旧的访问驱动程序?

无法使用 nyc/istanbul 进行代码覆盖

为啥我的使用“for-each 循环”的线性搜索代码不适用于混合输入?

为啥宽度:100% 不适用于 div display: table-cell?