簡體   English   中英

Javascript 類 getter setter 在單元測試中顯示未覆蓋的行

[英]Javascript class getter setter shows Uncovered Line under unit test

我有以下 javascript 類並使用 mocha 和 sinon 編寫單元測試。 當我運行測試用例時,我看到未覆蓋的“return this._agentId;”行和'this._agentId = value;'。我不確定如何覆蓋這些測試行。我正在使用伊斯坦布爾測試覆蓋工具來查看覆蓋范圍。

// 代理消息.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包對嗎? 我想你會發現 instanbul項目建議你使用 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

測試.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更高級配置,請開始剝離該配置並使用默認屬性。 看看你是否找到了甜蜜/麻煩的部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM