當我硬編碼在new.html.erb只是我的測試通過了上述的form_tag如下:Rails的have_selector不工作的時候選擇是application.html.erb
<div class="alert alert-error">Invalid email/password combination</div>
但在使用中產生div時application.html.erb中的flash.now消息產生new.html.erb,測試失敗。
--------------- application.html.erb ---------------------
<!DOCTYPE html>
<html>
<head>
<title><%= full_title(yield(:title)) %></title>
<%= render 'layouts/stylesheets' %>
</head>
<body>
<a name="top" />
<div id="main_wrapper">
<%= render 'layouts/leaderboard_advertisement' %>
<%= render 'layouts/header' %>
<div id="threecolwrap">
<div id="twocolwrap">
<%= render 'layouts/left_advertisement' %>
<section id="main_content_area">
<% flash.each do | key, value | %>
<%= content_tag(:div, value, class: "alert alert-#{key}") %>
<% end %>
<%= yield %>
</section>
</div> <!-- end of twocolwrap -->
<%= render 'layouts/left_advertisement' %>
</div> <!-- end of threcolwrap -->
<%= render 'layouts/footer' %>
</div> <!-- end of main_wrapper -->
</body>
</html>
--------------- new.html.erb ---------------------
<% provide(:title, "Sign In") %>
<div>
<div class="pages_title1">
<h2 class='title_text_with_logo'>Sign In</h2>
<%= image_tag "logo1_140_22.png", class: 'title_logo title_logo_position_right' %>
</div>
<div class="pages_text1 wide_column">
<div>
<%= form_tag(sessions_path) do %>
<%= label :session, :email %>
<%= text_field :session, :email %>
<%= label :session, :password %>
<%= password_field :session, :password %>
<%= submit_tag "Sign in" %>
<% end %>
<p>New user? <%= link_to "Sign up now!", signup_path %></p>
</div>
<div class='full_logo_center'>
<%= image_tag "fulllogo1_200_48.png" %>
</div>
</div>
</div>
--------------- test.html.erb ---------------------
describe "signin" do
before { visit signin_path }
let(:page_title) { 'Sign In' }
describe "with invalid information" do
it { should have_selector('h2', text: 'Sign In')}
it { should have_selector('div.alert.alert-error', text: 'Invalid') }
end
end
- ------------- session_controller.rb ---------------------
def create
user = User.find_by_email(params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
sign_in user
redirect_back_or user
else
flash.now[:error] = "Invalid email/password combination"
render 'new'
end
end
是的,在我的方面,骨頭的錯誤。感謝您的答覆。我真的很感激。 –