Как написать макрос контроллера RSpec которые могут принимать аргументы, определенные let или в блоке before?

Я использую Rails 3 и RSpec 2.6.0.

Не уверен, что это возможно, но вот что я хотел бы сделать:

describe UsersController do
  let(:user) { Fabricate :user }
  describe "GET /user/:id" do
    should_return_401_code_if_user_is_not_confirmed :get, :show, :id => user.id
  end
  describe "PUT /user/:id" do
    should_return_401_code_if_user_is_not_confirmed :put, :update, :id => user.id
  end
end

Я пытался реализовать макрос следующим образом:

module ControllerMacros
  def should_return_401_code_if_user_is_not_confirmed(verb, action, params = {})
    it "returns a 401 code if the user is not an admin" do
      send verb, action, params
      response.code.should == "401"
    end
  end
end

Но при запуске этих спецификаций я получаю сообщение об ошибке неопределенная локальная переменная или метод «пользователь» . Я попытался переключиться на переменную @user, определенную в блоке before, но это тоже не работает. Я подозреваю, что это потому, что я не нахожусь в блоке примера.

Можно ли передать аргументы макроса контроллера, определенные let или в блоке before?

Спасибо!

7
задан Florent2 15 July 2011 в 01:18
поделиться