如何模拟依赖项以返回特定数据



来自C#中的Moq,您可以在其中执行以下操作:

someMock
.Setup(toBeMocked => toBeMocked.MockedMethod(It.IsAny<Something>()))
.Returns(something);

然后在单元测试中,当我调用时

toBeMocked.MockedMethod()

返回something。我该如何处理sinonjs?

Sinon的工作方式与Moq有点不同,主要是因为C#与JS是一种截然不同的语言。Moq创建子类来注入伪方法,而sinon能够通过将它们直接分配到对象上来注入它们。

最基本的模式是,假设toBeMocked是一个具有实例方法MockedMethod:的对象

sinon.stub(toBeMocked, 'MockedMethod').returns(something);

这将存根方法分配给toBeMocked对象的MockedMethod属性。因此,即使MockedMethod是一个原型方法,它也只影响该对象。

如果您想为构造函数的所有实例替换一个方法,您可以这样做。假设MockedClass是用于创建toBeMocked对象的构造函数,它看起来如下:

sinon.stub(MockedClass.prototype, 'MockedMethod').returns(something);

然后在你的拆卸代码中:

MockedClass.prototype.MockedMethod.restore();

你需要这样恢复它,因为原型不是在测试之间重新创建的,所以如果你不这样做,你的存根会污染你的其他测试代码。

来自文档https://sinonjs.org/releases/v7.2.2/stubs/:

const fakeMethod = () => something;
const stub = sinon.stub(toBeMocked , 'MockedMethod');
stub.callsFake(fakeMethod);

更新:示例jsfiddle

最新更新