使用 sinon 存根 ES6 类字段(解决“无法存根不存在的属性”/“属性不存在!”)

问题描述 投票:0回答:1

我有课:

class Foo {
  baz = 3;

  bar() {
    return 5;
  }
}

我能够在实例和类本身上存根

bar()

  describe("#bar", function() {
    it("can be stubbed on an instance to return 25", function() {
      const foo = new Foo();
      sinon.stub(foo, "bar").returns(25);
      expect(foo.bar()).to.equal(25);
    })

    it("can be stubbed on the class to return 30", function () {
      sinon.stub(Foo.prototype, "bar").returns(30);
      const foo = new Foo();
      expect(foo.bar()).to.equal(30);
    })
  })

但是,当我尝试使用字段时:

  describe("property baz", function() { 
    it("can be stubbed on an instance to equal 9", function() {
      const foo = new Foo();
      sinon.stub(foo, "baz").value(9);
      expect(foo.baz).to.equal(9);
    })

    it("can be stubbed on the class to equal 12", function() {
      sinon.stub(Foo.prototype, "baz").value(12);
      const foo = new Foo();
      expect(foo.baz).to.equal(12);
    })
  })

第二次测试失败,并显示:

TypeError: Cannot stub non-existent property baz

我在这里发现了有关对象存根属性的问题,但我还没有看到有人解决这个特定问题。

理想情况下,我会使用

createSubInstance
并填写我自己的假字段和方法,但这给了我同一问题的一个变体:

    it("can be faked on a stub instance", function() {
      const foo = sinon.createStubInstance(Foo, {
        baz: 12,
      });
      expect(foo.baz).to.equal(12);
    })

此错误为:

Error: Cannot stub baz. Property does not exist!
mocha.js sinon es6-class stub
1个回答
0
投票

baz
是一个 公共实例字段

公共实例字段存在于类的每个创建的实例上

baz
不存在于
Foo.prototype
上,并且您正在尝试存根它。这就是你收到错误的原因:

TypeError:无法存根不存在的自有属性 baz

© www.soinside.com 2019 - 2024. All rights reserved.