2017-04-14 133 views
0

我很難弄清楚如何測試這個助手,因爲current_group未在我的測試用例中定義,我不知道如何將它存根。Rspec測試助手

module Admin 
    module EmployeesHelper 
    def upload_access 
     policy(current_group).can_bulk_create_employees? 
    end 

    def dashboard_params 
     download_employee_url = upload_access ? 
     download_admin_group_employees_import_csv_index_path(current_group) : nil 
     upload_employee_url = upload_access ? 
     admin_group_employees_import_csv_index_path(current_group) : nil 
     make_hash(upload_employee_url, download_employee_url) 
    end 

    private 

    def make_hash(upload_url, download_url) 
     { 
     employees: @employees, 
     addEmployeeUrl: new_admin_group_employee_path(current_group), 
     terminated_employees: @terminated_employees, 
     new_employees: @new_employees, 
     test_employees: @test_employees, 
     group_id: current_group.id, 
     downloadEmployeeUrl: download_url, 
     uploadEmployeeUrl: upload_url 
     } 
    end 
    end 
end 

這是我的測試看起來像,但它失敗,因爲current_group未定義。

require 'rails_helper' 

describe Admin::EmployeesHelper do 
    let!(:group) { create(:group) } 

    before do 
    # This stub doesn't work because helper doesn't implement current_group 
    allow(helper).to receive(:current_group).and_return(group) 
    end 

    it 'returns correct dashboard props' do 
    allow(helper).to receive(:upload_access).and_return(true) 
    props = helper.dashboard_params 
    expect(props).values_at(:downloadEmployeeUrl, :uploadEmployeeUrl).should_not include(nil) 
    end 
end 

回答

0

如果問題只與current_group方法,您可以包括這個幫手的虛擬類。類似這樣的:

let(:klass) { 
    Class.new do 
    include Admin::EmployeesHelper 

    def current_group 
     nil 
    end 
    end 
} 

let(:instance) { klass.new } 

before do 
    allow(instance).to receive(:current_group).and_return('whatever') # test-specific group 
end 

it 'returns correct dashboard props' do 
    allow(instance).to receive(:upload_access).and_return(true) 
    props = instance.dashboard_params 
    expect(props).values_at(:downloadEmployeeUrl, :uploadEmployeeUrl).should_not include(nil) 
end 

雖然我預見到你也必須爲url helpers包含一些東西。並設置這些實例變量。總而言之,這可能是不值得的麻煩。

0

我最終重構了幫手,而不是current_group作爲參數。