2013-07-19 4 views
5

私はレールとテスト駆動開発の世界では初めてです。 TDDではRSpecとCapybaraを使用しています。 現在、私はRailsの詳細を学ぶためのチュートリアルに取り組んでいると著者は、次の構文を使用している:TDD with Capybara(Rails); page.shouldとexpect(page)の違いは?

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」ではなく「specify」を使用する必要がありますか?この場合

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 } 

私が使用する1つの決定は私が表現したいものに基づいていると思います。多分、ここで私を助けることができますか?

ありがとうございます!

答えて

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

で行きます後者の1つ、それは新しい、彼らはその方向に進んでいます。私は彼らに前者を非難する意思があるのか​​どうかはわかりませんが、そうした場合、あなたのコードをすべて更新する必要はありません。

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のことと構文に慣れてきたと思います。 btw: "--format documentation"はかなり良いです。 – milchschaum

2

期待する構文は新しい構文、RSpecのチームによって推奨されても1、参照です:それについてhttp://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax

と見、指定:Difference between an it block and a specify block in RSpec

+0

ブログのリンクは非常に貴重です。また、新しいプロジェクトに全面的に使用を無効にする方法を説明するのにも役立ちます。いいです! – Gurpreet

0

複数の行に同じ対象がある場合は、subjectshouldを使ってDRYすることができます。 expectを使用すると、コードが実際にDRYになることはありません。 を参照してください: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を使用してください。ここでmyronmarstonのコメントを見ることができます:http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax#comment-564045016

関連する問題