Basics
1 describe Something do
2
3 before do
4 @thing = Something.new
5 end
6
7 it 'should behave in some way' do
8 @thing.action.should == 'expected'
9 end
10
11 after(:all) do
12 Something.destroy_all
13 end
14
15 end
Model Specs
1 describe Task do
2
3 describe 'validation' do
4
5 before do
6 @task = Task.new(:title => 'test task')
7 end
8
9 it 'should succeed when all attributres are set' do
10 @task.should be_valid
11 end
12
13 end
14
15 end
Controller Specs
1 describe TasksController do
2
3 describe 'handling GET /tasks' do
4
5 it \"should render the 'tasks/index' template\" do
6 get :index
7
8 response.should render_template('tasks/index')
9 end
10
12 end
13
14 end
View Specs
1 describe 'tasks/index' do
2
3 before do
4 @task = stub_model(Task)
5 assigns[:tasks] = [@task]
6 end
7
8 it 'should render a link to tasks/new' do
9 render('tasks/index')
10
11 response.should have_tag('a[href=?]', new_task_path)
12 end
13
14 end
Demo
Shared Examples (1)
1 describe 'a secure action', :shared => true do
2
3 describe 'without a logged-in user' do
4
5 it 'should redirect to new_session_path' do
6 do_request
7
8 response.should redirect_to(new_session_path)
9 end
10
11 end
12
13 end
Shared Examples (2)
1 describe TasksController do
2
3 describe 'handling GET /tasks' do
4
5 it_should_behave_like 'a secure action'
6
7 # => redirect without logged-in user
8
9 end
10
11 end
Demo
Matchers
1 class RequireAttributeMatcher
2
3 def initialize(attribute)
4 @attribute = attribute
5 end
6
7 def matches?(model)
8 @model = model
9 model.send(\"#{@attribute.to_s}=\".to_sym, nil)
10 return !model.valid?
11 end
12
13 end
Demo
Stories (Cucumber)
Given [Context]
When [Aktion]
Then [Business Value!]
Stories (Cucumber)
Scenario: Create Task
Given that there are no tasks
When I create task \"task 1\"
When I go to the tasks page
Then I should see \"task 1\"
Stories (Cucumber)
1 Given /^that there are no tasks$/ do
2 Task.destroy_all
3 end
4
5 When /^I create task \"(.*)\"$/ do |title|
6 post tasks_url, :task => { :title => title }
7 end
8
9 When /^I go to the tasks page$/ do
10 get tasks_url
11 end
12
13 Then /^I should see \"(.*)\"$/ do |title|
14 response.body.should =~ /#{title}/m
15 end
0 comments
Post a comment