In the test, we should use the ‘describe’, ‘context’, ‘it’ structure.
Here I use a controller test as an example.
I have this my_controller.rb with two controller actions:
class MyController < ApplicationControllerdef controller_action_1# Code goes hereenddef controller_action_2# Code goes hereend
end
And controller test file my_controller_test.rb:
require ‘test_helper’class MyControllerTest < ActionController::TestCase# Initialize the variables that will be used in all describe block tests within MyControllerTest classbefore dov_block = ‘this variable is only accessible in this block’@v_describe_level = ‘this varible is accessible in all describe blocks’end# Test for controller action 1describe ‘#controller_action_1′ do# Intialize the variables that will be used in all context block tests within this describe blockbefore dov_block = ‘this variable is only accessible in this block’@v_context_level = ‘this varible is accessible in all context blocks’endcontext ‘when the user is admin’ do# Intialize the variables that will be used in all it block tests within this context blockbefore dov_block = ‘this variable is only accessible in this block’@v_it_level = ‘this varible is accessible in all it blocks’endit ‘must has admin role’ do# Code goes here. Examples: http://ruby-doc.org/stdlib-1.9.3/libdoc/minitest/spec/rdoc/MiniTest/Expectations.html# must_be# must_be_empty# must_be_nil# must_be_same_as# must_equal# must_raise# wont_be# wont_be_nil# wont_equal# wont_includeendit ‘must redirect to admin management page’ do# Code goes here, example:# assert_redirected_toendendcontext ‘when the user is not admin’ doit ‘must not have admin role’ doendit ‘must redirect to non-admin management page’ doendendenddescribe ‘#controller_action_2′ do# Code goes hereendprivate# Helper functions goes here
end
Some reminder:
1. Given, When, Then
2. Use fixture instead of creating data on the go
3. If no Before block, don't need to use context