2016-12-15 15 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が正しい値を持っているかどうかを確認します。問題は、もし私がバリューアサイン後に仕様に入れてしまった場合、私の値が割り当てられているのを見ても、クレジット管理変数が偽であり、本当であると予想されるのでテストは失敗します。私は同じコードを持っていて、自分自身のためのテストをするためにコンソールを設置しました。同じハッシュを使用していますが、私は正しい真の価値を持っています。ですから、@users_list varにはこのような権利が割り当てられていないようです。また、@account_emailは空の配列ですが、私は工場から作成されたアカウントを持っていますので、両方の共通の問題のように見えます。

+0

あなたは 'index'を実行した後にデータを設定しています。 –

+0

インデックスの前に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

の後の空の配列になります。これは正しいアプローチです。テストデータを正しく設定するか、データをフェッチするスタブメソッドを設定する必要があります。 –

関連する問題