繁体   English   中英

如何模拟依赖关系以返回特定数据?

[英]How do I mock dependencies to return specific data?

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

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

然后在单元测试中当我打电话

toBeMocked.MockedMethod()

它返回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创建子类以注入伪造的方法,而sinon可以通过将它们直接分配给对象来注入它们。

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

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

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

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

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

然后在您的拆卸代码中:

MockedClass.prototype.MockedMethod.restore();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM