如何模拟对 return 特定数据的依赖?

How do I mock dependencies to return specific data?

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

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

然后在单元测试的时候调用

toBeMocked.MockedMethod()

它returns something。我如何使用 sinonjs 执行此操作?

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

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

更新:例子jsfiddle

Sinon 的工作方式与 Moq 略有不同,主要是因为 C# 是一种与 JS 截然不同的语言。 Moq 创建 sub-类 来注入假方法,而 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();

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