2016-12-15 3 views
0

У меня есть действие контроллера с некоторыми переменными экземпляра, которые я хочу, чтобы проверить, вот мой код действия:RSpec не получает правильное значение экземпляра вар

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 правильное значение. Проблема в том, что если я pus некоторые помещает в spec после назначения var, я вижу, что мое значение назначено, но тест терпит неудачу, потому что переменная admin admin является ложной и ожидается как истина. Я получил тот же код и положил его на консоль rails, чтобы сделать тест для себя, обратите внимание, что я использую тот же хеш, и у меня есть правильное истинное значение. Таким образом, похоже, что @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

Это правильный подход. Вы либо должны правильно настроить свои тестовые данные, либо методы заглушки, которые извлекают данные. –

Смежные вопросы