Как вы выделяете общие вызовы before (: each) в RSpec, чтобы их могли использовать несколько спецификаций? - PullRequest
8 голосов
/ 26 мая 2011

Я бы хотел выделить этот набор кода так, чтобы все мои тесты контроллера (ну почти все) использовали этот блок 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 ]

12 голосов
/ 26 мая 2011

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 голос
/ 26 мая 2011

Итак, поместите блок в SecureController.

Если есть определенные потомки SecureController, которым не нужны эти функции, вы можете создать другой промежуточный суперкласс или обернуть вызов метода условным элементом управления, которым вы управляете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...