2016-12-15 21 views
0

我有我想要測試一些實例變量的控制作用的權值,這裏是我的動作代碼:rspec的沒有得到實例VAR

def index 
    @users_list = get_response('accounts/by_tag/QuickcallAdmin')['users'].to_a 
    @credit_admin = [email protected]_list.select{|h| h['email'] == current_user.email}.blank? 
    @accounts_emails = Account.pluck(:email) 
    end 

和規範代碼:

describe 'GET #index' do 
    login_user 
    let(:account) {create(:account)} 

    it 'responds with 200' do 
     get :index, :format => :html 
     controller.instance_variable_set(:@users_list, [{"id"=>2, "email"=>"[email protected]", "tenant_id"=>1,"first_name"=>"valera","last_name"=>"rotari","phone_number"=>"89439438954", "tags"=>[{"name"=>"Program", "value"=>"my_company"}, {"name"=>"ProgramAdmin", "value"=>"new_program"}, {"name"=>"ProgramAdmin", "value"=>"new_program1"}, {"name"=>"QuickcallAdmin", "value"=>"q1"}, {"name"=>"CreditAdmin", "value"=>"q1"}]}]) 

     expect(assigns(:credit_admin)).to eql(true) 
     expect(assigns(:accounts_emails)).to eql(["[email protected]"]) 
    end 
    end 

因此,您可以看到我嘗試分配一些散列,我通常從api調用的響應中獲取散列,然後查看credit_admin和account_emails vars是否具有正確的值。問題是,如果我在var分配後給某些put放入spec中,我看到了我的值,但是測試失敗,因爲信用管理變量爲false並且預期爲true。我得到了相同的代碼,並把它放在軌道控制檯爲自己做測試,注意我使用相同的散列,並且我有正確的真實值。所以看起來好像@users_list var沒有被賦值或者類似的東西。此外@account_email是空數組,但我有工廠創建的帳戶,所以它應該有一些價值,它似乎是一個共同的問題,對他們兩個

+0

您在運行'index'後正在設置數據。 –

+0

當我在index之前移動controller.instance_variable_set時,我將這個變量作爲索引後的空數組 – maki

回答

2

所以我做了另一種方式,將我的規範代碼更改爲

describe 'GET #index' do 
    login_user 

    it 'responds with 200' do 
     create(:account) 
     allow(controller).to receive(:get_response).and_return({"users" => [{"id"=>2, "email"=>"[email protected]","tenant_id"=>1,"first_name"=>"valera","last_name"=>"rotari","phone_number"=>"89439438954","tags"=>[{"name"=>"Program", "value"=>"my_company"}, {"name"=>"ProgramAdmin", "value"=>"new_program"}, {"name"=>"ProgramAdmin", "value"=>"new_program1"}, {"name"=>"QuickcallAdmin", "value"=>"q1"}, {"name"=>"CreditAdmin", "value"=>"q1"}]}]}) 
     get :index, :format => :html 

     expect(assigns(:credit_admin)).to eql(true) 
     expect(assigns(:accounts_emails)).to eql(["[email protected]"]) 
    end 
    end 
+0

這是正確的方法。您或者需要正確設置測試數據,或者是存取數據的存根方法。 –