使用SINON使用所需的参数断言特定的存根调用 [英] Asserting a specific stub call was made with the required arguments using sinon

查看:0
本文介绍了使用SINON使用所需的参数断言特定的存根调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设您正在测试一个函数,该函数将使用不同的参数多次调用依赖项:

var sut = {
    ImportantFunction: function(dependency){
        dependency("a", 1);
        dependency("b", 2);
    }
};

使用QUnit+sinon并假定调用的顺序不重要,我可以编写以下测试,以确保函数按预期调用依赖项:

test("dependency was called as expected", function () {
    var dependencyStub = sinon.stub();

    sut.ImportantFunction(dependencyStub);

    ok(dependencyStub.calledTwice, "dependency was called twice");            
    sinon.assert.calledWith(dependencyStub, "a", 1);
    sinon.assert.calledWith(dependencyStub, "b", 2);
});

但是,如果顺序很重要并且我希望测试将其考虑在内,该怎么办?使用QUnit+SINON编写此类测试的最佳方法是什么?

我使用了以下方法,但我丢失了sinon assertions提供的描述性失败消息(它显示了预期值和实际值)。为此,我刚刚手动添加了一些描述性消息,但它不如包含预期值和实际值的故障消息有用(并且必须手动维护)。

ok(dependencyStub.firstCall.calledWith("a", 1), "dependency called with expected args 'a', 1");
ok(dependencyStub.secondCall.calledWith("b", 2), "dependency called with expected args 'b', 2");

有没有办法对第一个或第二个调用这样的特定调用使用sinon.assert.calledWith这样的断言?

this fiddle中的设置示例

推荐答案

您可以使用sinon.assert.callOrder(spy1, spy2, ...)spy1.calledBefore(spy2)spy2.calledAfter(spy1)

这些也可以与spy.calledWith(...)的结果一起使用,例如sinon.assert.callOrder(spy.withArgs('a'), spy.withArgs('b'))

这篇关于使用SINON使用所需的参数断言特定的存根调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆