我有课:
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!
baz
是一个 公共实例字段
公共实例字段存在于类的每个创建的实例上
baz
不存在于 Foo.prototype
上,并且您正在尝试存根它。这就是你收到错误的原因:
TypeError:无法存根不存在的自有属性 baz