如何在RSpec中分解常见的"之前(:每个)"调用,以便多个规范可以使用它们?

Fir*_*lem 8 ruby refactoring unit-testing rspec ruby-on-rails

我想要考虑这一堆代码,以便我的所有控制器测试(好吧,几乎所有这些)都使用这个before(:each)块:

before(:each) do
  @user = User.new
  controller.stub(:authenticate_user!)
  controller.stub(:current_user).and_return(@user)
  controller.stub(:add_secure_model_data)
end
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?我不想将它包含在所有控制器中...因为有一些不需要它.基本上,每个扩展的控制器SecureController都需要这个before(:each)块.

有没有好办法呢?

谢谢

Dav*_*sky 12

http://relishapp.com/rspec/rspec-core/dir/example-groups/shared-context

shared_context "controller stuff" do
  before(:each) { ... }
end

describe SomeController do
  include_context "controller stuff"
  ...
end
Run Code Online (Sandbox Code Playgroud)

  • 创作者已经说过...... :) (2认同)