在我的用户模型中,所有用户都在user
回调中被分配了before_create
角色。所以我在创建管理员用户时遇到了很多麻烦,无法在某些测试中使用。这是我尝试过的,这是行不通的:
require 'spec_helper'
describe "Exercises" do
describe "GET /Exercises" do
it "gives the expected status code." do
sign_in_as_valid_user
@user.role = 'admin'
get exercises_path
response.status.should be(200)
end
为了完整性,这里是调用的方法:
module ValidUserRequestHelper
def sign_in_as_valid_user
FactoryGirl.create :program
@user ||= FactoryGirl.create :user
post_via_redirect user_session_path, 'user[email]' => @user.email, 'user[password]' => @user.password
end
end
和工厂:
FactoryGirl.define do
sequence :email do |n|
"test#{n}@vitogo.com"
end
factory :user do
email
password '12345678'
password_confirmation '12345678'
goal_id 1
experience_level_id 1
gender 'Female'
end
end
我只是想改变特定测试中的角色。
任何想法如何做到这一点?这让我发疯了。提前谢谢!
答案 0 :(得分:3)
然后我编辑了我的用户工厂以创建从我的用户工厂继承的管理工厂,然后在after(:create)
回调中分配管理员角色,如下所示:
factory :user do
email
password '12345678'
password_confirmation '12345678'
gender 'Male'
factory :admin do
after(:create) { |user| user.role = 'admin'; user.save }
end
end
答案 1 :(得分:0)
尝试将@user
包装在方法中,如ValidUserRequestHelper
def current_user
@user
end
然后在您的规范中调用current_user.role = 'admin'