2013-07-19 4 views
5

Ich bin neu in der Welt der Schienen und der testgetriebenen Entwicklung. Für TDD verwende ich RSpec und Capybara. Derzeit arbeite ich an einem Tutorial mehr über Rails zu lernen, und der Autor folgende Syntax verwendet:TDD mit Capybara (Schienen); Unterschied zwischen page.should und expect (page) .to?

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

Da scheint es, dass beide austauschbar sind frage ich mich, wenn die Syntax zu benutzen? Denn für den oben beschriebenen Fall könnte ich auch schreiben:

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

Was macht grundsätzlich das gleiche, oder?

Auch, wann sollte ich "specify" anstelle von "it" verwenden?

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

In diesem Fall kann ich auch schreiben:

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

ich die Entscheidung von erraten, eine, die auf bedienen basiert, was ich ausdrücken will. Vielleicht kannst du mir hier draußen helfen ?!

Danke!

Antwort

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

Gehen Sie mit der letzteres, es ist neuer, sie drängen in diese Richtung. Ich weiß nicht, ob sie die Absicht haben, Ersteres abzulehnen, aber wenn sie es tun, müssen Sie nicht Ihren gesamten Code aktualisieren.

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

Sie sind Aliase, so dass nur das wählen, das es klarer macht. Wenn Sie Ihre Tests benennen, wissen Sie, wann Sie welche verwenden sollen (example).

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

Ehrlich gesagt, ich das nicht genannt spec Stil vermeiden. Es ist ein bisschen zu magisch, was es schwierig macht, darüber nachzudenken und oft akrobatische Einstellungen zu benötigen, um das Thema richtig zu trainieren. Außerdem führe ich meine Spezifikationen mit --format documentation, und die automatisch generierte Nachricht ist nie was ich will. In diesem Fall würde ich etwas wie it 'has a signout link'

+0

Danke für Ihre Antwort! Ich denke, ich habe mich einfach an die ganze tdd-Sache und auch an die Syntax gewöhnt, um ein Gefühl dafür zu bekommen, welches Alias ​​zu verwenden ist. Übrigens: Die "-format-Dokumentation" ist ziemlich nett. – milchschaum

2

die erwarten Syntax ist die neue Syntax, es ist auch derjenige, der durch die rspec Team empfohlen wird, finden Sie unter: http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax

es Bezug auf, und geben Sie unter: Difference between an it block and a specify block in RSpec

+0

Der Blog-Link ist von unschätzbarem Wert. Es hilft auch zu erklären, wie wir die Verwendung von sollte insgesamt auf neue Projekte deaktivieren können. Gute! – Gurpreet

0

sagen wollen. Wenn Sie die gleichen Themen für mehrere Zeilen haben, könnten Sie es mit subject und should DRY. Mit expect können Sie Ihren Code tatsächlich weniger DRY machen. See: http://betterspecs.org/#subject

Sie haben dieses Beispiel:

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

Es ist besser zu sagen:

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

Das ist interessant, weil in dem betterspecs oben verknüpft, ist die bevorzugte Art und Weise ist nicht expect zu verwenden , aber should zugunsten von DRY zu verwenden. Sie können Myronmarstons Kommentar dazu hier sehen: http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax#comment-564045016