在这里使用rails 3.1。我在集成测试中遇到了会话变量的一些问题。
test "new registration" do
get "/user/sign_up?type=normal"
assert_response :success
assert_equal 'normal', session[:registration]
assert_template "user_registrations/new"
assert_difference('User.count', +1) do
post "/user", :user => {:email => "kjsdfkjksjdf@sdfsdf.com", :user_name => "lara", :password => "dfdfdfdfdfdf", :password_confirmation => "dfdfdfdfdfdf"}
end
assert_response :redirect
assert_template "user_registrations/new"
@user = User.find_by_user_name('lara')
assert_equal 'lara', @user.user_name
@user.confirm!
end
所有的断言都通过了这么好,但据我所知,session [:registration]在发布到“/ user”时没有通过。
在user_registration控制器的创建操作中:
if session[:registration] == "normal"
@user.role = "normal"
@user.status = "registering"
@user.save
else
@user.role = "fan"
@user.save
end
因此,当用户创建时,@ user.role =“fan”,应该是@ user.role =“normal”。
当我发布时,我似乎无法通过该会话变量。根据我的理解,在“新注册”测试中,只要测试尚未结束,所有会话变量都保持活动状态。假设应该发布会话变量,我错了吗?有什么建议?