On Github wrozka / ppppp-acceptance-testing
Pawel Pierzchala @zwrozka
Top-down testing
Risk of bottom-up design
Can be shown early
Role of acceptance test
Smoke test
Feedback cycles
Testing pyramid
How to write good acceptance tests?
Imperative vs Declartive
page.click_button "Login" page.should have_content("Welcome, jack@daniles.com!")
vs
And I click "Login" button Then I should see "Welcome, jack@daniles.com!"
Abstract
login_page.open login_page.login("jack@daniels.com", "sardines") login_page.should_be_logged_as("jack@daniels.com")
Page object
class LoginPage < Page def open visit '/login' end def login(email, password) fill_in "Email", with: email fill_in "Password", with: password click_button "Login" end def should_be_logged_as(email) within(".navbar") do page.should have_content(email) end end end
Page object for a fragment
class TweetPage < Page def initialize(tweet) @tweet = tweet end def retweet within("tweet-{@tweet.id}") do click_button("Retweet") end end end
End to End
From keyboard to API
From API to DB
feature "Adding messages to timeline" do scenario "adding a message to a friend timeline" do timeline.open("joe") timeline.add_message("I like cats") timeline.should have_message("I like cats") end end
rack-test vs headless
poltergeist
Red Green Refactor?
Switch roles often
Blog 2.0
github.com/wrozka/blogPosting is already implemented
It needs comments and ratings
Focus on acceptance test, create a new page object
Implement as little as possible