2013-07-19 9 views
5

Sono nuovo nel mondo delle rotaie e nello sviluppo di test driven. Per TDD, sto usando RSpec e Capybara. Attualmente, sto lavorando su un tutorial per imparare di più su Rails e l'autore sta usando sintassi seguenti:TDD con Capybara (Rails); differenza tra page.should e expect (page) .to?

page.should have_title('All users') 
expect(page).to have_selector('li', text: user.name) 

Poiché sembra che entrambi sono intercambiabili Mi chiedo quando usare quale la sintassi? Perché, per il caso descritto sopra, potrei anche scrivere:

page.should have_title('All users') 
page.should have_selector('li', text: user.name) 

Che sostanzialmente fa lo stesso, giusto?

Inoltre, quando è necessario utilizzare "specificare" anziché "esso"?

it { should have_link('Sign out', href: signout_path) } 
specify { expect(user.reload.name).to eq new_name } 

In questo caso, potrei anche scrivere:

it { should have_link('Sign out', href: signout_path) } 
it { expect(user.reload.name).to eq new_name } 

Credo che la decisione di cui uno da utilizzare si basa su ciò che voglio esprimere. Forse, puoi aiutarmi qui ?!

Grazie!

risposta

7
page.should have_title('All users') 
expect(page).to have_selector('li', text: user.name) 

andare con la quest'ultimo uno, è più recente, stanno spingendo in quella direzione. Non so se hanno l'intenzione di deprecare il primo, ma se lo fanno, non dovrai aggiornare tutto il tuo codice.

it { should have_link('Sign out', href: signout_path) } 
specify { expect(user.reload.name).to eq new_name } 

Sono alias, quindi basta scegliere quello che rende più chiaro. Se dai un nome ai tuoi test, saprai quando usare (example).

it { should have_link('Sign out', href: signout_path) } 

Francamente, evitare lo stile non-nome spec. È un po 'troppo magico, il che rende difficile ragionare, e spesso richiede un setup acrobatico per far sì che il soggetto funzioni correttamente. Inoltre, eseguo le mie specifiche con --format documentation e il messaggio generato automaticamente non è mai quello che voglio. In questo caso, vorrei dire qualcosa come it 'has a signout link'

+0

Grazie per la tua risposta! Credo di essermi abituato a tutta la cosa tdd e anche alla sintassi per avere un'idea di quale alias usare. btw: la "--format documentation" è molto carina. – milchschaum

0

Quando si hanno gli stessi soggetti per più linee, è possibile ASCIUGARLA usando subject e should. L'utilizzo di expect può effettivamente rendere il tuo codice meno ASCIUTTO. See: http://betterspecs.org/#subject

hai dato questo esempio:

page.should have_title('All users') 
page.should have_selector('li', text: user.name) 

E 'meglio dire:

subject { page } 
it { 
    should have_title('All users') 
    should have_selector('li', text: user.name) 
} 

Questo è interessante perché nei betterspecs link qui sopra, il modo migliore è di non usare expect , ma per utilizzare should in favore di DRY. Puoi vedere il commento di myronmarston a questo proposito: http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax#comment-564045016

Problemi correlati