How to test login action in a controller?

My login page has a login form with three fields:login,password,and
image
verification code,now how to test it?

require File.dirname(FILE) + “/…/spec_helper”

http://www.kirkbushell.com/articles/testing-using-rspec-part-2-the-controller

http://blog.enjoyrails.com/2008/02/18/rspec-basic/

http://rails.anyware-technologies.com.br/2009/04/21/tdd-on-rails-4-rspec-authlogic-factory_girl-and-resource_controller/

http://matthewkwilliams.com/index.php/tag/rspec/

describe AdminController do
integrate_views

before(:each) do
@params = {:login => ‘username’, :pass => ‘password’, :code_image =>
“1234”}
end

it “should redirect after input login and pass” do
session.should_receive(:[]).with(:code).and_return(“1234”) # this
does’nt work!!!
#session.stub!(:[]).with(:code).and_return “1234”
Admin.should_receive(:authenticate).with(params[:login],
params[:pass]).and_return(true)
post ‘/’, @params
response.should be_redirect
end

end

错误提示是:
Spec::Mocks::MockExpectationError in ‘AdminController should redirect
after
input login and pass’
#ActionController::TestSession:0x9e77198 received :[] with unexpected
arguments
expected: (:code)
got: (“flash”)
/home/qichunren/gems/actionpack-2.1.0/lib/action_controller/flash.rb:157:in
flash_without_components' /home/qichunren/gems/actionpack-2.1.0/lib/action_controller/components.rb:105:in flash’
/home/qichunren/gems/actionpack-2.1.0/lib/action_controller/flash.rb:167:in
assign_shortcuts' /home/qichunren/gems/actionpack-2.1.0/lib/action_controller/base.rb:523:in process_without_filters’
/home/qichunren/gems/actionpack-2.1.0/lib/action_controller/filters.rb:569:in
process_without_session_management_support' /home/qichunren/gems/actionpack-2.1.0/lib/action_controller/session_management.rb:130:in process_without_test’
/home/qichunren/gems/actionpack-2.1.0/lib/action_controller/test_process.rb:16:in
process' /home/qichunren/gems/actionpack-2.1.0/lib/action_controller/test_process.rb:394:in process’
/home/qichunren/gems/actionpack-2.1.0/lib/action_controller/test_process.rb:365:in
`post’
./spec/controllers/admin_controller_test.rb:31:

Finished in 0.023053 seconds