2013-10-09 94 views
0

在我的用戶模型中,所有用戶在before_create回調中被分配user的角色。所以我在創建管理員用戶在某些測試中使用時遇到了很多麻煩。下面是我嘗試過,這是不工作:FactoryGirl:在調用FactoryGirl.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

有什麼理由不工作ING?測試失敗還是會引發錯誤? –

+0

測試失敗,因爲我試圖訪問只能由管理員訪問的頁面,所以我得到重定向。 – Arel

回答

2

然後我編輯我的用戶廠創建從繼承的管理員廠current_user.role = 'admin'我用戶工廠,然後分配管理員角色在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 
+0

如果解決了您的問題,您應該接受此答案。 – zetetic

+1

@zetetic。所以明天之前我不會讓我接受它。你可以用類似的方式回答這個問題,如果你願意,我會給你對號。 – Arel

+1

對不起,忘了延遲。保持積分,你應得的。 – zetetic

0

嘗試包裹@user的方法,像這樣在ValidUserRequestHelper

def current_user 
    @user 
end 

然後調用您的規格