我无法模拟使用 onCall 和预期参数。
下面的代码给出了Object #<Object> has no method 'withExactArgs'
var mock = sinon.mock();
mock.exactly(2);
mock.onCall(0).withExactArgs("arg1", "arg2").returns("foo");
mock.verify();
withExactArgs
方法可用于存根属性: mock.onCall(0).stub.withExactArguments
。
这是预期的行为还是错误?
似乎它也不适用于 .stub 。 我收到一条错误消息,指出使用错误的参数调用了该方法。 显示第一次调用的参数,但显示第二次调用的要求。 好像它丢弃了 onCall(0)。
var mock = sinon.mock();
mock.exactly(2);
mock.onFirstCall().stub.withExactArgs("bar1", "bar2").returns("bar");
mock.onSecondCall().stub.withExactArgs("foo1", "foo2").returns("foo");
mock("bar1", "bar2");
mock("foo1", "foo2");
mock.verify();
给ExpectationError: Anonymous mock received wrong arguments ["bar1", "bar2"], expected ["foo1", "foo2"]
它既不是预期的行为,也不是错误。 你在混合隐喻。 onCall
和withArgs
都是识别方法调用的方式。
// So either,
mock.onCall(0).returns("foo")
// OR
mock.withArgs("arg1", "arg2").returns("foo")
// but not both
由于同样的原因,您的第二个示例存在缺陷,可能应该使用存根重写。
var stub = sinon.stub();
stub.withArgs("bar1", "bar2").returns("bar");
stub.withArgs("foo1", "foo2").returns("foo");
stub("bar1", "bar2");
stub("foo1", "foo2");
sinon.assert.calledTwice(stub);
// verify the 2 calls
sinon.assert.calledWithExactly(stub, "bar1", "bar2");
sinon.assert.calledWithExactly(stub, "foo1", "foo2");
// verify the 2 calls in order
sinon.assert.callOrder(
stub.withArgs("bar1", "bar2"),
stub.withArgs("foo1", "foo2")
);
不幸的是, withExactArgs
上没有Stub
。
然而...
您可以识别对存根的单个调用,即使使用相同的参数多次调用也是如此。 例如
stub.withArgs("foo")
.onCall(0).returns("a")
.onCall(1).returns("b");
stub.withArgs("bar")
.onCall(0).returns("c")
.onCall(1).returns("d");
如果这有帮助?
@mantoni我认为这个问题可以关闭
最有用的评论
它既不是预期的行为,也不是错误。 你在混合隐喻。
onCall
和withArgs
都是识别方法调用的方式。由于同样的原因,您的第二个示例存在缺陷,可能应该使用存根重写。
不幸的是,
withExactArgs
上没有Stub
。