在编写RSpec测试时,我发现自己编写了很多类似这样的代码,以确保在测试执行期间调用了一个方法(为了便于讨论,我只能说,我不能在调用后真正询问对象的状态,因为该方法执行的操作不容易看到效果).

describe "#foo"
  it "should call 'bar' with appropriate arguments" do
    called_bar = false
    subject.stub(:bar).with("an argument I want") { called_bar = true }
    subject.foo
    expect(called_bar).to be_true
  end
end

我想知道的是:还有比这更好的语法吗?我是否遗漏了一些时髦的RSpec惊人之处,可以将上述代码缩减为几行?should_receive听起来它应该这样做,但进一步阅读,它听起来不完全是这样做的.

推荐答案

it "should call 'bar' with appropriate arguments" do
  expect(subject).to receive(:bar).with("an argument I want")
  subject.foo
end

Ruby-on-rails相关问答推荐

如何在rails 7中禁用Simple_Form验证

在控制器操作中适当使用ActiveModel Dirty

错误AESGCMOpen获取密码:消息身份验证失败:Golang解密GCM

Rails ActiveRecord::LogSubscriber 不输出详细查询日志(log)

active_storage.resolve_model_to_route的不同值代表什么意思?

Turbo-Rails:如何将 Turbo Frame 添加到 `application.html.erb`?

Ruby:如何通过谓词将一个集合拆分为 ruby​​ 中的两个集合?

为什么总是有东西在我的 mac 上的 5000 端口运行

错误 NoMethodError:ActionView::Base:Class 的未定义方法 `debug_rjs='

骨干model.destroy()即使工作正常也会调用错误回调函数?

从 ActiveRecord 模型的集合中构建哈希

搭建脚手架时建立关系

使用 RSpec 2 关闭一个规范的事务性固定装置

Rspec/Capybara 正在加载,循环要求被认为是有害的

Redis 引发需要 NOAUTH 身份验证错误,但没有设置密码

Ruby on Rails:调试 rake 任务

Ruby on Rails i18n - 想要在模型中翻译自定义消息

ActiveRecord 事务中的错误处理?

在 Rails 中命名布尔列

Sidekiq Rails 4.2 使用 Active Job 还是 Worker?有什么不同