2017-01-20 1 views
1

donc j'ai besoin de tester un partiel. le partiel est rendu par action spécifique, c'est quelque chose comme boîte de messages sur facebook. mon test ressemble à ceci:comment tester partiel avec variables d'instance

describe 'partials/_partial.js.erb' do 
    it 'displays stuff' do 
    render 
    end 
end 

je le lance, et je sais qu'il fait ce que je veux parce que je reçois immédiatement

Failure/Error: if @items.count > 0 

    ActionView::Template::Error: 
     undefined method `count' for nil:NilClass 

Je ne ai pas besoin d'entendre qu'il est une mauvaise pratique à utiliser Vars par exemple dans un partiel, il est déjà là et je dois travailler avec. alors comment puis-je définir @items ici ...?

MISE À JOUR:

action du contrôleur ressemble à ceci:

def controller_method 
    @items = items_method 
    render_version(:partial => "partials/_partial.js.erb") 
end 
+0

pouvez-vous envoyer l'action du contrôleur? – Gaston

+0

@Gaston c'est là – Leo

+0

êtes-vous sûr que le test appelle le contrôleur? Je pense que cela rend juste le modèle. – Gaston

Répondre

2

On dirait que vous utilisez rspec. Dans ce cas, toutes les variables d'instance que vous définissez pendant votre test seront disponibles pour vos vues (qu'elles soient partielles ou non).

describe "users/_messages" do 
    before(:each) do 
    # This is available in your view. 
    @items = [] 
    end 

    it "renders without error when @items is empty" do 
    # Will pass, @items is available 
    expect { render }.to_not raise_error 
    end 

    it "shows a count of how many messages there are" do 
    # You can modify it before rendering 
    @items << Message.new 
    render 

    expect(rendered).to have_content "You have 1 message" 
    end 
end