You are currently browsing the tag archive for the ‘Cucumber’ tag.
All of the sudden some columns began to misbehave in cucumber tests, claiming that “Attempt to call private method (NoMethodError)” on normal column attributes!
A simple fix for this, essentially saying that a method is not private when its a column:
#features/support/ar_private_fix.rb required from env.rb
unless ActiveRecord::Base.methods.include?('private_method_defined_with_fix?')
class ActiveRecord::Base
class << self
def private_method_defined_with_fix?(method)
return false if columns_hash.keys.include?(method.to_s)
private_method_defined_without_fix?(method)
end
alias_method_chain :private_method_defined?, :fix
end
end
end
You just have to love this “syntax” ![]()
Story
#features/discussion.feature
Scenario: I add to an discussion
Given I am logged in
And a "Discussion" exists for "Festival" "1"
And I am on "Festival" "1"
When I fill in "Text" with "Halloo"
And I press "Send"
Then I should be on "Festival" "1"
And I should see "Halloo"
Steps
#features/step_definitions/common_steps.rb # On page/record Given /^I am on "([^"]*)"$/ do |path| visit path end Then /^I should be on "([^"]*)"$/ do |path| current_path.should == path end Given /^I am on "([^"]*)" "([^"]*)"$/ do |model,number| visit polymorphic_path(record_from_strings(model,number)) end Then /^I should be on "([^"]*)" "([^"]*)"$/ do |model,number| current_path.should == polymorphic_path(record_from_strings(model,number)) end # Existing Given /^a "([^"]*)" exists for "([^"]*)" "([^"]*)"$/ do |associated,model,number| record = record_from_strings(model,number) record.send(associated.underscore+'=',valid(associated)) record.save! end # Login Then /^I should be logged in$/ do should be_logged_in end Given /^I am logged in$/ do visit 'login' fill_in 'email', :with=>'quentin@example.com' fill_in 'password', :with=>'test' click_button 'Login' end # Support def current_path response.request.request_uri end def record_from_strings(model,number) model.constantize.find(:first,:offset=>number.to_i-1) end
env.rb
#features/support/env.rb #load all fixtures include AuthenticatedTestHelper #restful_authentification include ValidAttributes #http://github.com/grosser/valid_attributes
I finally found some time to mess with cucumber, its pretty nice but has some edges and quircks… but for now i like it
Install
This was rather hard… (these libraries and frex should not be necessary for mac)
sudo apt-get install libxslt1-dev libxml2-dev racc sudo gem install aaronp-frex brynary-webrat sudo gem install cucumber ./script/generate cucumber rake features
First story
#features/signup.feature
Feature: Signup
Scenario: A new user comes to the page and wants to register.
Given I am on "/"
When I click "register"
And I fill in "user[name]" with "Michael G"
And I fill in "Email" with "test@test.de"
And I fill in "Password" with "test"
And I fill in "Password confirmation" with "test"
And I press "Register for the free basic account"
Then I should be on "/"
And I should be logged in
And I should see a flash about "activation"
Environment setup
#append to features/support/env.rb #load all fixtures -- http://pragmatig.wordpress.com/2008/12/25/load-all-fixtures-when-not-in-test/ include AuthenticatedTestHelper # restful authentification include RspecResponseEnhancer # http://pragmatig.wordpress.com/2008/04/20/rspec-responseshould-information-enhancers/
Common steps
There is a nice collection of steps already available in steps/webrat_steps, but some basics where missing….
#features/step_definitions/common_steps.rb
When /^I click "(.*)"$/ do |link|
click_link(link)
end
When /^I am on "(.*)"$/ do |path|
header('Accept-Language','EN-en')
visit path
end
Then /^I should be on "(.*)"$/ do |path|
response.request.request_uri.should == path
end
Then /^I should see a flash about "(.*)"/ do |message|
doc.search('div.flash_notice').inner_html.include?(message).should be_true
end
Then /^I should be logged in$/ do
should be_logged_in
end
def doc
Hpricot(response.body)
end
Output
rake features
Feature: Signup # features/signup.feature
Scenario: A new user comes to the page and wants to register. # features/signup.feature:2
Given I am on "/" # features/step_definitions/common_steps.rb:6
When I click register # features/step_definitions/common_steps.rb:1
And I fill in "user[name]" with "Michael G" # features/step_definitions/webrat_steps.rb:12
And I fill in "Email" with "test@test.de" # features/step_definitions/webrat_steps.rb:12
And I fill in "Password" with "test" # features/step_definitions/webrat_steps.rb:12
And I fill in "Password confirmation" with "test" # features/step_definitions/webrat_steps.rb:12
And I press "Register for the free basic account" # features/step_definitions/webrat_steps.rb:4
Then I should be on "/" # features/step_definitions/common_steps.rb:11
And I should be logged in # features/step_definitions/common_steps.rb:19
And I should see a flash about "activation" # features/step_definitions/common_steps.rb:15
10 steps passed
Feels great to write stories again, sadly takes more time then unit tests, but the readability is superb! IMO a very nice way of doing integration tests…
