来自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