首页 > 解决方案 > TypeError:无法存根不存在的属性

问题描述

我是 nodeJS 的新手,在创建存根时遇到问题。我有一个类,有变量和函数。我想为这种情况写 UT。我正在使用 sinon 为我的班级存根函数,这工作正常,但如何处理变量?

const sinon = require("sinon");
const MyClass = require("../MyClass").MyClass;
describe("the functions for fetching the information", function () {
    let requestStub;
    let fileReadStub;
    cont mockVariable = 'abc';
    const mockConfig = {
        "ID" : "abc123xyz",
        "SERVICE_ENABLED" : true
    }
    const mockRequest = {
        "field1": "value1",
        "field2": "value2",
        "field3": "value3"
    }
    beforeEach(function () {
        sandbox = sinon.createSandbox();
        requestStub = sandbox.stub(MyClass, "createRequestForGraphApi").returns(mockRequest);
        sandbox.stub(MyClass, "myVariable").value(mockVariable);
        fileReadStub = sandbox.stub(fs, 'readFileSync');
    });
    afterEach(function () {
        sandbox.restore();
    });
    
    it("returns the data if info received from Graph is valid", async function () {
        let actualEvents = [];
        fileReadStub.returns(JSON.stringify(mockConfig));
        actualEvents =  await MyClass.getEvents("token");
        expect(requestStub.calledOnce).to.be.true;
        expect(actualEvents).to.deep.equal(expectedEvents);
    });
});

在我的函数内部,getEvents 依赖于 2 个东西,1 个函数“createRequestForGraphApi”和 1 个类变量“myVariable”。由于 createRequestForGraphApi 依赖于更多的内部函数,所以我尝试模拟它并且能够做到,但我无法在这里模拟类变量值。

我收到以下变量错误 -

     TypeError: Cannot stub non-existent property myVariable
      at Function.stub (node_modules/sinon/lib/sinon/stub.js:73:15)
      at Sandbox.stub (node_modules/sinon/lib/sinon/sandbox.js:331:37)
      at Context.<anonymous> (test/MyClass.spec.js:136:11)

当我为这个类创建对象时,我得到了同样的错误,但对于函数部分。

标签: javascriptnode.jssinon

解决方案


推荐阅读