2013-09-25 9 views
0

J'ai actuellement quelque chose comme:Rspec attendre attribue un raccourci

it 'assigns @competition' do 
    expect(assigns(:competition)).to be_a_new(Competition) 
end 

Y at-il une version plus courte de ce en utilisant la syntaxe de type it { should ... }?

Répondre

3

Je ne sais pas que ce soit plus court, mais vous pouvez utiliser:

subject {assigns(:competition)} 
it {should be_a_new(Competition)} 

ou vous pouvez utiliser:

it {expect(assigns(:competition)).to be_a_new(Competition)} 

Dans les deux cas, le raccourcissement vient de l'élimination de la argument de chaîne à it, qui est indépendant de l'utilisation de should.

+0

Est-ce que 'expect (subject)' fonctionne aussi? – rxgx

+0

Oui, bien que référencer explicitement 'subject' soit considéré comme une" odeur "par l'auteur original de RSpec. –

1

Maintenant la documentation RSpec suggère d'utiliser is_expected.to, comme dans:

describe [1, 2, 3] do 
    it { is_expected.to be_an Array } 
    it { is_expected.not_to include 4 } 
end 

cf. http://www.rubydoc.info/gems/rspec-core/RSpec/Core/MemoizedHelpers#is_expected-instance_method

+0

Mais comment est-il utilisé en conjonction avec 'assigns'? – tolgap

+0

Utilisez simplement 'subject {assigns (: competition)}' ci-dessus ou 'expect (assigne (: competition))'. –

+0

AFAICT 'passes (assigne (: concurrence))' passes, que @competition soit affecté ou non – dcorking