Javascript class getter setter 显示单元测试下的未覆盖行
Javascript class getter setter shows Uncovered Line under unit test
我关注 javascript class 并使用 mocha 和 sinon 编写单元测试。当我 运行 测试用例时,我看到 'return this._agentId;' 和 'this._agentId = value;' 的未覆盖行。我不确定如何在 test.I 下覆盖这些行,我正在使用伊斯坦布尔测试覆盖工具来查看覆盖率.
// Agentmessage.js
class AgentMessage {
constructor(agentId, message) {
this._agentId = agentId;
this._message = message;
}
get agentId() {
return this._agentId;
}
set agentId(value) {
this._agentId = value;
}
}
module.exports = AgentMessage;
// Agentmessage.test.js
'use strict';
const chai=require('chai');
const sinon=require('sinon');
var chaiAsPromised=require('chai-as-promised');
chai.use(chaiAsPromised).should();
const expect = chai.expect;
const agentMessage = require('../src/model/agentMessage');
describe('agentMessage test',function() {
let sandbox;
let agentMessageObj;
beforeEach(() => {
agentMessageObj = new agentMessage('agentId', 'message');
sandbox=sinon.sandbox.create();
});
afterEach(() => {
sandbox.restore();
});
it('agentMessage set agentId Test',() => {
agentMessageObj.agentId = 'agentId';
expect(agentMessageObj.agentId).to.deep.equal('agentId');
});
it('agentMessage get agentId Test',() => {
expect(agentMessageObj.agentId).to.equal('agentId');
});
});
我没有看到与您相同的问题。我得到 100% 的覆盖率。
你说的是伊斯坦布尔,但实际上你在使用 nyc package correct? I think you'll find that the instanbul project 建议你使用 nyc runner,如果你还没有的话。
如果可以,请考虑刷新您的环境。
rm -rf .nyc_output && rm -rf coverage && rm -rf node_modules
npm i --save-dev nyc mocha chai
如果这不能解决问题,请考虑至少暂时删除您在这些特定测试中不使用的内容。例如 sinon 和 chai-as-promised。隔离代码。看看有没有冲突。
试试这个类似的代码。我得到全面报道。
./node_modules/.bin/nyc --reporter html ./node_modules/.bin/mocha test.js
test.js
const { expect } = require('chai')
const AgentMessage = require('./index');
describe('agentMessage test', function () {
let agentMessage;
beforeEach(function () {
agentMessage = new AgentMessage('agentId01', 'message02');
});
it('agentMessage set agentId Test', async function () {
agentMessage.agentId = 'agentId02';
expect(agentMessage.agentId).to.deep.equal('agentId02');
});
});
如果在所有这些之后,如果它仍然是一个问题,如果您使用的是 more advanced configuration of nyc/istanbul,请开始剥离该配置并使用默认属性。看看你是否找到 sweet/troubled 部分。
我关注 javascript class 并使用 mocha 和 sinon 编写单元测试。当我 运行 测试用例时,我看到 'return this._agentId;' 和 'this._agentId = value;' 的未覆盖行。我不确定如何在 test.I 下覆盖这些行,我正在使用伊斯坦布尔测试覆盖工具来查看覆盖率.
// Agentmessage.js
class AgentMessage {
constructor(agentId, message) {
this._agentId = agentId;
this._message = message;
}
get agentId() {
return this._agentId;
}
set agentId(value) {
this._agentId = value;
}
}
module.exports = AgentMessage;
// Agentmessage.test.js
'use strict';
const chai=require('chai');
const sinon=require('sinon');
var chaiAsPromised=require('chai-as-promised');
chai.use(chaiAsPromised).should();
const expect = chai.expect;
const agentMessage = require('../src/model/agentMessage');
describe('agentMessage test',function() {
let sandbox;
let agentMessageObj;
beforeEach(() => {
agentMessageObj = new agentMessage('agentId', 'message');
sandbox=sinon.sandbox.create();
});
afterEach(() => {
sandbox.restore();
});
it('agentMessage set agentId Test',() => {
agentMessageObj.agentId = 'agentId';
expect(agentMessageObj.agentId).to.deep.equal('agentId');
});
it('agentMessage get agentId Test',() => {
expect(agentMessageObj.agentId).to.equal('agentId');
});
});
我没有看到与您相同的问题。我得到 100% 的覆盖率。
你说的是伊斯坦布尔,但实际上你在使用 nyc package correct? I think you'll find that the instanbul project 建议你使用 nyc runner,如果你还没有的话。
如果可以,请考虑刷新您的环境。
rm -rf .nyc_output && rm -rf coverage && rm -rf node_modules
npm i --save-dev nyc mocha chai
如果这不能解决问题,请考虑至少暂时删除您在这些特定测试中不使用的内容。例如 sinon 和 chai-as-promised。隔离代码。看看有没有冲突。
试试这个类似的代码。我得到全面报道。
./node_modules/.bin/nyc --reporter html ./node_modules/.bin/mocha test.js
test.js
const { expect } = require('chai')
const AgentMessage = require('./index');
describe('agentMessage test', function () {
let agentMessage;
beforeEach(function () {
agentMessage = new AgentMessage('agentId01', 'message02');
});
it('agentMessage set agentId Test', async function () {
agentMessage.agentId = 'agentId02';
expect(agentMessage.agentId).to.deep.equal('agentId02');
});
});
如果在所有这些之后,如果它仍然是一个问题,如果您使用的是 more advanced configuration of nyc/istanbul,请开始剥离该配置并使用默认属性。看看你是否找到 sweet/troubled 部分。