2016-04-07 16 views
0

Ich habe diesen folgenden Fehler, während ich Ansichten in Rspec testet.Testen von Ansichten in Rspec, undefinierte Methode sammeln

1) Probleme/neu macht neues Problem Form

Failure/Error: 
<div class="col-md-8 col-sm-8"> 
    <%= f.select :approval_status, options_for_select(@approval_statuses.collect { |as| [as[0].humanize, as[0]] }, selected: @problem.approval_status), {}, class: "form-control" %> 
</div> 
ActionView::Template::Error: 
    undefined method `collect' for nil:NilClass 

I @approval_statuses in Controller-Aktion bin vorbei. Es funktioniert gut in Ansichten, aber in Testfällen bekomme ich diesen Fehler.

Controller Aktion:

def new 
    @problem = Problem.new 
    @approval_statuses = Problem.approval_statuses 
    @visibilities = Problem.visibilities 
end 

In Modell

enum approval_status: {not_approved: 0, approved: 1} 

In new.html.erb_spec.rb

require 'rails_helper' 

RSpec.describe "problems/new", type: :view do 
    before(:each) do 
    assign(:problem, Problem.new()) 
    end 

    it "renders new problem form" do 
    render 
    assert_select "form[action=?][method=?]", problems_path, "post" do 
    end 

    end 
end 
+2

@approval_statuses ist null, fügen Sie bitte Ihre Controller-Aktion ein. –

+0

@JuanManuelRodulfoSalcedo: Controller-Aktion hinzugefügt. –

+0

Ich nehme an, dass Problem.approval_statuses Methode einige Daten aus der DB zurückgibt, also nehme ich an, dass Sie diese Samen nicht in der Testumgebung haben. –

Antwort

1

Sie die Einstellung der @problem Instanz-Variable aber nicht @approval_statuses oder @visibilities so sind diese beide derzeit null.

RSpec.describe "problems/new", type: :view do 
    before(:each) do 
    assign(:problem, Problem.new) 
    assign(:approval_statuses, Problem.approval_statues) 
    assign(:visibilities, Problem.visibilities) 
    end 

    it "renders new problem form" do 
    render 

    assert_select "form[action=?][method=?]", problems_path, "post" do 
    end 

    end 
end 
+0

Danke, Diese Lösung löste mein Problem und ich erkannte, was ich vermisste. –

Verwandte Themen