2013-07-19 46 views
5

我是新來的軌道和測試驅動開發的世界。對於TDD,我使用RSpec和Capybara。 目前,我工作的一個教程,瞭解更多關於Rails和筆者使用以下語法:因爲它似乎這兩個是可以互換的,我不知道什麼時候要使用的語法TDD與水豚(Rails); page.should和expect(page).to之間的區別?

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

?因爲,對於上面描述的情況,我也可以這樣寫:

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

其中基本上是一樣的吧?

此外,何時應該使用「指定」而不是「它」?

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

在這種情況下,我也可以這樣寫:

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

我猜測的依據是什麼我想表達的使用哪一個的決定。也許,你可以幫我在這裏?!

謝謝!

回答

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

轉到與後一個,它更新,他們正朝着這個方向努力。我不知道他們是否有意貶低前者,但如果他們這樣做,則不必更新所有代碼。

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

它們的別名,所以只是選擇一個使之更清晰。如果您命名您的測試,您將知道何時使用哪個(example)。

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

坦率地說,我避免非命名規範風格。這有點太神奇了,這使得很難推理,並且經常需要雜技設置才能正確解決問題。此外,我運行我的規格--format documentation,自動生成的消息是從來沒有我想要的。在這種情況下,我想說一些類似於it 'has a signout link'

+0

感謝您的回答!我想我已經習慣了整個tdd的東西,也習慣了語法,以便感受何時使用哪個別名。順便說一句:「 - 格式文檔」是相當不錯的。 – milchschaum

0

如果您有多個相同的主題,可以使用subjectshould進行乾燥。使用expect實際上可以讓你的代碼更少幹。 見:http://betterspecs.org/#subject

你給了這個例子:

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

這是更好地說:

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

這很有趣,因爲在betterspecs上面的鏈接,首選的方法是不使用expect ,但要使用should以支持DRY。你可以在這裏看到myronmarston的評論:http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax#comment-564045016

相關問題