如何在RSpec中分解常见的“before(:each)”调用,以便多个规范可以使用它们?

时间:2011-05-25 21:01:43

标签: ruby-on-rails ruby unit-testing refactoring rspec

我想要考虑这一堆代码,以便我的所有控制器测试(好吧,几乎所有这些)都使用这个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

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

有没有好办法呢?

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

然后将该块放入SecureController.

如果有SecureController的特定子项不需要此功能,则可以创建另一个中间超类,或使用您控制的条件包装方法调用。