ruby-on-rails - R规范。测试 block 调用的参数

标签 ruby-on-rails ruby ruby-on-rails-4 rspec

我在 Rails 项目中测试 block 调用参数时遇到了问题。

我大约有这个代码(简化):

DropboxApi.read_path do |batch|
    # some actions are here
end

其中批处理是数据的哈希值。

我有一个 rspec 规范,它测试 DropboxApi 方法,我需要测试“批处理”的某些字段。我想要得到这样的东西:

it { expect(batch).to respond_to(:data) }
it { expect(batch.data.count).to eq(6) }

我没有找到一些方法来做到这一点。在这种情况下,产量匹配器没有帮助,因为它们仅检查 block 调用而不检查其参数。

有人可以帮助实现我想要的吗?我想我可能应该改变我的规范方法。但我还不知道怎么办。

最佳答案

实际上非常简单。

it "responds to data" do
  DropboxApi.read_path do |batch|
    expect(batch).to respond_to(:data)
  end
end

it "has a count of 6" do 
  DropboxApi.read_path do |batch| 
    expect(batch.data.count).to eq(6)
  end
end

如果您确实希望它看起来更简洁,就像您的示例一样,您可以执行以下操作。

let(:batch) {
  DropboxApi.read_path do |batch|
    return batch
  end
 }

 it { expect(batch).to respond_to(:data) }
 it { expect(batch.data.count).to eq(6) }

关于ruby-on-rails - R规范。测试 block 调用的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25402128/

相关文章:

ruby-on-rails - rails 3 : rollback for after_create

ruby - 如何在 Ruby 中检测和处理不同的 EOL?

ruby-on-rails - 根据成员的年龄过滤团队的范围

ruby-on-rails - 如何在 Rails 中优化这段代码?

ruby-on-rails - 重定向后 Rails session 不持久

ruby-on-rails - 如何在 Rails 4 应用程序中启用 CORS

ruby - ruby rm_rf 是异步的吗?

javascript - Prism.js 不适用于 Rails 4 turbolinks

html - Rails 3. 如何在按钮标签中使用 disable_with?

ruby-on-rails - 如何使用 Rspec 在 Rails 中测试非 Rack Web 服务?