2017-04-14 1 views
0

J'ai du mal à trouver comment tester cette aide car current_group n'est pas défini dans mon cas de test et je ne suis pas sûr de savoir comment l'utiliser.Rspec test helper

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 

Voici ce que mon test ressemble, mais il échoue parce que current_group n'est pas défini.

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 

Répondre

0

Si le problème est seulement avec la méthode current_group, vous pouvez inclure cette aide dans une classe fictive. Quelque chose comme ceci:

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 

Bien que je prévois que vous deviez inclure quelque chose pour les aides d'url aussi. Et mettre en place ces vars d'instance. Dans l'ensemble, cela ne vaut probablement pas la peine.

0

J'ai fini par refactoriser l'aide pour avoir current_group comme argument à la place.