gpt4 book ai didi

ruby-on-rails - 如何在 RSpec 中模拟 block 参数?

转载 作者:行者123 更新时间:2023-12-04 14:02:42 26 4
gpt4 key购买 nike

假设我在 ruby​​ 中使用块参数调用 Ruby 方法:

  Net::SFTP.start('testhost.com', 'test_user', keys: ['key']) do |sftp|
sftp.upload!('/local', '/remote')
end
我如何测试 upload!方法是用正确的参数调用的?
我可以走到这一步,测试 #start 的参数,
  expect(Net::SFTP).
to receive(:start) do |host, username, keyword_args, &block|
expect(host).to eq("testhost.com")
expect(username).to eq("test_user")
expect(keyword_args).to eq(keys: ["test_key"])
end
但我不知道如何测试 #upload!在块中被调用。

最佳答案

利用 and_yield - 与 allow().to receive 结合使用时效果最佳和 have_received匹配器:

sftp = spy
allow(Net::SFTP).to receive(:start).and_yield(sftp)

# execute your code here

expect(Net::SFTP).to have_received(:start).with("testhost.com", "test_user", keys: ["test_key"])
expect(sftp).to have_received(:upload!).with('./local', '/remote')

关于ruby-on-rails - 如何在 RSpec 中模拟 block 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69488001/

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