2016-12-15 47 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

这是正确的方法。您或者需要正确设置测试数据,或者是存取数据的存根方法。 –