Added cucumber and rspec testing support
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
# Commonly used webrat steps
|
||||
# http://github.com/brynary/webrat
|
||||
|
||||
When /^I press "(.*)"$/ do |button|
|
||||
click_button(button)
|
||||
end
|
||||
|
||||
When /^I follow "(.*)"$/ do |link|
|
||||
click_link(link)
|
||||
end
|
||||
|
||||
When /^I fill in "(.*)" with "(.*)"$/ do |field, value|
|
||||
fill_in(field, :with => value)
|
||||
end
|
||||
|
||||
When /^I select "(.*)" from "(.*)"$/ do |value, field|
|
||||
select(value, :from => field)
|
||||
end
|
||||
|
||||
# Use this step in conjunction with Rail's datetime_select helper. For example:
|
||||
# When I select "December 25, 2008 10:00" as the date and time
|
||||
When /^I select "(.*)" as the date and time$/ do |time|
|
||||
select_datetime(time)
|
||||
end
|
||||
|
||||
# Use this step when using multiple datetime_select helpers on a page or
|
||||
# you want to specify which datetime to select. Given the following view:
|
||||
# <%= f.label :preferred %><br />
|
||||
# <%= f.datetime_select :preferred %>
|
||||
# <%= f.label :alternative %><br />
|
||||
# <%= f.datetime_select :alternative %>
|
||||
# The following steps would fill out the form:
|
||||
# When I select "November 23, 2004 11:20" as the "Preferred" data and time
|
||||
# And I select "November 25, 2004 10:30" as the "Alternative" data and time
|
||||
When /^I select "(.*)" as the "(.*)" date and time$/ do |datetime, datetime_label|
|
||||
select_datetime(datetime, :from => datetime_label)
|
||||
end
|
||||
|
||||
# Use this step in conjuction with Rail's time_select helper. For example:
|
||||
# When I select "2:20PM" as the time
|
||||
# Note: Rail's default time helper provides 24-hour time-- not 12 hour time. Webrat
|
||||
# will convert the 2:20PM to 14:20 and then select it.
|
||||
When /^I select "(.*)" as the time$/ do |time|
|
||||
select_time(time)
|
||||
end
|
||||
|
||||
# Use this step when using multiple time_select helpers on a page or you want to
|
||||
# specify the name of the time on the form. For example:
|
||||
# When I select "7:30AM" as the "Gym" time
|
||||
When /^I select "(.*)" as the "(.*)" time$/ do |time, time_label|
|
||||
select_time(time, :from => time_label)
|
||||
end
|
||||
|
||||
# Use this step in conjuction with Rail's date_select helper. For example:
|
||||
# When I select "February 20, 1981" as the date
|
||||
When /^I select "(.*)" as the date$/ do |date|
|
||||
select_date(date)
|
||||
end
|
||||
|
||||
# Use this step when using multiple date_select helpers on one page or
|
||||
# you want to specify the name of the date on the form. For example:
|
||||
# When I select "April 26, 1982" as the "Date of Birth" date
|
||||
When /^I select "(.*)" as the "(.*)" date$/ do |date, date_label|
|
||||
select_date(date, :from => date_label)
|
||||
end
|
||||
|
||||
When /^I check "(.*)"$/ do |field|
|
||||
check(field)
|
||||
end
|
||||
|
||||
When /^I uncheck "(.*)"$/ do |field|
|
||||
uncheck(field)
|
||||
end
|
||||
|
||||
When /^I choose "(.*)"$/ do |field|
|
||||
choose(field)
|
||||
end
|
||||
|
||||
When /^I attach the file at "(.*)" to "(.*)" $/ do |path, field|
|
||||
attach_file(field, path)
|
||||
end
|
||||
|
||||
Then /^I should see "(.*)"$/ do |text|
|
||||
response.body.should =~ /#{text}/m
|
||||
end
|
||||
|
||||
Then /^I should not see "(.*)"$/ do |text|
|
||||
response.body.should_not =~ /#{text}/m
|
||||
end
|
||||
|
||||
Then /^the "(.*)" checkbox should be checked$/ do |label|
|
||||
field_labeled(label).should be_checked
|
||||
end
|
||||
@@ -0,0 +1,22 @@
|
||||
# Sets up the Rails environment for Cucumber
|
||||
ENV["RAILS_ENV"] = "test"
|
||||
require File.expand_path(File.dirname(__FILE__) + '/../../../../../config/environment')
|
||||
require 'cucumber/rails/world'
|
||||
Cucumber::Rails.use_transactional_fixtures
|
||||
|
||||
require 'webrat/rails'
|
||||
|
||||
# Comment out the next two lines if you're not using RSpec's matchers (should / should_not) in your steps.
|
||||
require 'cucumber/rails/rspec'
|
||||
require 'webrat/rspec-rails'
|
||||
|
||||
require 'ruby-debug'
|
||||
|
||||
# require the entire app if we're running under coverage testing,
|
||||
# so we measure 0% covered files in the report
|
||||
#
|
||||
# http://www.pervasivecode.com/blog/2008/05/16/making-rcov-measure-your-whole-rails-app-even-if-tests-miss-entire-source-files/
|
||||
if defined?(Rcov)
|
||||
all_app_files = Dir.glob('{app,lib}/**/*.rb')
|
||||
all_app_files.each{|rb| require rb}
|
||||
end
|
||||
@@ -0,0 +1,7 @@
|
||||
require File.dirname(__FILE__) + '/spec_helper'
|
||||
|
||||
describe Class do
|
||||
it "should be a class of Class" do
|
||||
Class.class.should eql(Class)
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,7 @@
|
||||
--colour
|
||||
--format
|
||||
progress
|
||||
--loadby
|
||||
mtime
|
||||
--reverse
|
||||
--backtrace
|
||||
@@ -0,0 +1,81 @@
|
||||
# This file is copied to ~/spec when you run 'ruby script/generate rspec'
|
||||
# from the project root directory.
|
||||
ENV["RAILS_ENV"] = "test"
|
||||
require File.expand_path(File.dirname(__FILE__) + "/../../../../config/environment")
|
||||
require 'spec'
|
||||
require 'spec/rails'
|
||||
require 'ruby-debug'
|
||||
|
||||
Spec::Runner.configure do |config|
|
||||
# If you're not using ActiveRecord you should remove these
|
||||
# lines, delete config/database.yml and disable :active_record
|
||||
# in your config/boot.rb
|
||||
config.use_transactional_fixtures = true
|
||||
config.use_instantiated_fixtures = false
|
||||
config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
|
||||
|
||||
# == Fixtures
|
||||
#
|
||||
# You can declare fixtures for each example_group like this:
|
||||
# describe "...." do
|
||||
# fixtures :table_a, :table_b
|
||||
#
|
||||
# Alternatively, if you prefer to declare them only once, you can
|
||||
# do so right here. Just uncomment the next line and replace the fixture
|
||||
# names with your fixtures.
|
||||
#
|
||||
# config.global_fixtures = :table_a, :table_b
|
||||
#
|
||||
# If you declare global fixtures, be aware that they will be declared
|
||||
# for all of your examples, even those that don't use them.
|
||||
#
|
||||
# == Mock Framework
|
||||
#
|
||||
# RSpec uses it's own mocking framework by default. If you prefer to
|
||||
# use mocha, flexmock or RR, uncomment the appropriate line:
|
||||
#
|
||||
# config.mock_with :mocha
|
||||
# config.mock_with :flexmock
|
||||
# config.mock_with :rr
|
||||
end
|
||||
|
||||
# require the entire app if we're running under coverage testing,
|
||||
# so we measure 0% covered files in the report
|
||||
#
|
||||
# http://www.pervasivecode.com/blog/2008/05/16/making-rcov-measure-your-whole-rails-app-even-if-tests-miss-entire-source-files/
|
||||
if defined?(Rcov)
|
||||
all_app_files = Dir.glob('{app,lib}/**/*.rb')
|
||||
all_app_files.each{|rb| require rb}
|
||||
end
|
||||
|
||||
|
||||
module AssociationMatcher
|
||||
class Association
|
||||
def initialize(field, association_type)
|
||||
@field = field
|
||||
@association_type = association_type
|
||||
end
|
||||
|
||||
def matches?(model)
|
||||
@model=model
|
||||
association = @model.reflect_on_association(@field)
|
||||
return false if association.nil?
|
||||
|
||||
return association.name == @field && association.macro == @association_type
|
||||
end
|
||||
|
||||
def failure_message
|
||||
"expected <#{@model.name}> to have a #{@association_type} association for #{@field}"
|
||||
end
|
||||
|
||||
def negative_failure_message
|
||||
"expected <#{@model.name}> to not have a #{@association_type} association for #{@field} but one was found"
|
||||
end
|
||||
end
|
||||
|
||||
def have_association(field, association_type)
|
||||
Association.new(field, association_type)
|
||||
end
|
||||
end
|
||||
|
||||
include AssociationMatcher
|
||||
Reference in New Issue
Block a user