@ Собственный ответ pschuegr заставил меня переступить черту. Для полноты, это то, что я сделал, чтобы мне было легко настроить как спецификации запроса, так и спецификации контроллера (используя FactoryGirl для создания пользовательского экземпляра):
в /spec/support/sign_in_support.rb:
#module for helping controller specs
module ValidUserHelper
def signed_in_as_a_valid_user
@user ||= FactoryGirl.create :user
sign_in @user # method from devise:TestHelpers
end
end
# module for helping request specs
module ValidUserRequestHelper
# for use in request specs
def sign_in_as_a_valid_user
@user ||= FactoryGirl.create :user
post_via_redirect user_session_path, 'user[email]' => @user.email, 'user[password]' => @user.password
end
end
RSpec.configure do |config|
config.include ValidUserHelper, :type => :controller
config.include ValidUserRequestHelper, :type => :request
end
Тогда в спецификации запроса:
describe "GET /things" do
it "test access to things, works with a signed in user" do
sign_in_as_a_valid_user
get things_path
response.status.should be(200)
end
end
describe "GET /things" do
it "test access to things, does not work without a signed in user" do
get things_path
response.status.should be(302) # redirect to sign in page
end
end
и аналогичным образом, используйте 'signature_in_as_valid_user' в спецификациях контроллера (что оборачивает метод sign_in Devise :: TestHelpers с пользователем из FactoryGirl)