JavaScript类Getter Setter在单位测试下显示未覆盖的线路



我使用Mocha和Sinon有以下JavaScript类和写作单元测试。当我运行测试案例时,我会看到"返回this._agentid;"的发现线和'this._agentid = value;'。我不确定如何覆盖这些线条。

//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%的覆盖范围。

您说的是伊斯坦布尔,但实际上您使用的是纽约市的软件包吗?我想您会发现Instanbul项目建议您使用NYC Runner,如果您还没有。

如果您有能力,请考虑刷新环境。

rm -rf .nyc_output && rm -rf coverage && rm -rf node_modules
npm i --save-dev nyc mocha chai

如果没有清理问题,请考虑至少暂时删除您在这些特定测试中没有使用的东西。例如,Sinon和Chai-As宣传。隔离代码。看看那里是否有一些冲突。

尝试使用此类似的代码。我得到了全部覆盖范围。

./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');
  });
});

如果所有这些仍然是一个问题,如果您使用的是NYC/ISTANBUL的更高级配置,请开始剥离该配置并使用默认属性。看看您是否找到了甜/麻烦的部分。

最新更新