作者egist (Egist)
看板Ruby
标题[问题] Rails 3 测试view render
时间Fri Oct 8 20:59:16 2010
最近在练习rails的各种测试,不过遇到了一点问题 Orz
程式主要内容是让使用者填写注册资料并送出,如果注册成功
会写入flash[:notice]并redirect到首页并显示flash讯息。
在rails的测试程式中,我用assert_select去确认,flash是不是有被正确显示。
现在的情况是,如果从浏览器直接填资料、送出後,可以成功跳转页面并且也显示
出flash的内容,但是用 assert_select 却显示错误,说没有显示flash。
想请问一下可能是哪个环节有问题,谢谢各位。
以下是一些程式片段:
档案: test/functional/users_controller_test.rb
require 'test_helper'
class UsersControllerTest < ActionController::TestCase
...
test "POST 'create' successful case" do
before_count = User.count
post :create, :user=>valid_user_attr
assert_redirected_to root_url
assert_equal 'Sign up successfully!', flash[:notice]
assert_equal before_count+1, User.count
assert_select 'ul
#notice_messages>li' <==测试failure
end
...
end
档案: app/controllers/users_controller.rb
class UsersController < ApplicationController
...
def create
@new_user = User.new(params[:user])
if @new_user.save
flash[:notice] = 'Sign up successfully!'
redirect_to :controller=>'home', :action=>'index'
else
flash.now[:alert] = 'Sign up fail!'
render 'users/new'
end
end
end
档案: app/views/layouts/application.html.erb
<html>
...
<section id="system_messages">
<% if flash[:notice] %>
<ul id="notice_messages" class="message notice">
<li><%= flash[:notice] %></li>
</ul> <% end %>
<% if flash[:alert] %>
<ul id="alert_messages" class="message alert">
<li><%= flash[:alert] %></li>
</ul>
<% end %>
</section>
...
</html>
最後这是ruby --version的内容:
ruby 1.8.7 (2010-04-19 patchlevel 253) [i686-darwin10.4.0],
MBARI 0x6770, Ruby Enterprise Edition 2010.02
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.91.127.135