gpt4 book ai didi

rspec-spies 检查 stub 方法和方法 spy 的调用参数

转载 作者:行者123 更新时间:2023-12-02 21:58:00 27 4
gpt4 key购买 nike

我正在使用rspec-spies我想知道在打完所有电话后是否有办法检查 spy 。

例如,如果我做类似的事情

# setup
Post.stub(:find).with(@post.id).and_return(@post)

do_something_to_call_post_find()

# verify find was called
Post.should have_received(:find).with(@post.id)

这很好用,但如果 Post 没有收到预期的参数,我会收到一条无用的错误消息(基本上是“Post 应该收到带有 123 的 find”)。相反,我想看看对 `find 的实际调用是什么。

我可以在do_something_to_call_post_find()之后暂停,但是有没有办法列出对 stub / spy 的所有调用/参数?

实际用例今天这个问题吸引了我——我期待着 Post.should have_received(:find).with(@post.id),其中 @post.id 是一个整数 ,我的 Controller 测试将参数(包括 id)作为字符串传递。如果我能够检查实际的调用,我就会看到 123"123" 之间的区别,而且它会很明显。

最佳答案

在 rspec 2.14.0.rc1 中,这一缺陷不再是问题,它包含改进的 rspec-spies 功能,现已在 github 上提供。

例如,执行以下规范:

class Foo
def self.bar(arg)
end
end

describe "test" do
it "should show differences" do
Foo.stub(:bar)
Foo.bar(123)
Foo.should have_received(:bar).with('123')
end
end

生成以下输出:

F

Failures:

1) test should show differences
Failure/Error: Foo.should have_received(:bar).with('123')
<Foo (class)> received :bar with unexpected arguments
expected: ("123")
got: (123)
# ./foo_spec.rb:10:in `block (2 levels) in <top (required)>'

Finished in 0.00082 seconds
1 example, 1 failure

Failed examples:

rspec ./foo_spec.rb:7 # test should show differences
Peters-MacBook-Air-2:botmetrics palfvin$

更新:基于对 https://github.com/technicalpickles/rspec-spies/blob/master/lib/rspec-spies.rbhave_received 匹配器定义的检查和一些非正式测试,似乎可以通过编程方式访问收到的消息,如下所示:

Foo.__send__(:__mock_proxy).instance_variable_get("@messages_received")

其中 Foo 是您的测试替身。

关于rspec-spies 检查 stub 方法和方法 spy 的调用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17429453/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com