Reputation: 5
First and foremost I appreciate you all taking the time to review my issue.
I'm a rails rookie working my way through Michael Hartl's Rails Tutorial and I've come about the following error messages when running my Rspec.
1) Authentication with valid information
Failure/Error: click_button "Sign in"
ActionView::MissingTemplate:
Missing template sessions/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}. Searched in:
* "/Users/Ladarris/rails_projects/sample_app/app/views"
# ./spec/requests/authentication_pages_spec.rb:24:in `block (3 levels) in <top (required)>'
2) Authentication with valid information
Failure/Error: click_button "Sign in"
ActionView::MissingTemplate:
Missing template sessions/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}. Searched in:
* "/Users/Ladarris/rails_projects/sample_app/app/views"
# ./spec/requests/authentication_pages_spec.rb:24:in `block (3 levels) in <top (required)>'
3) Authentication with valid information
Failure/Error: click_button "Sign in"
ActionView::MissingTemplate:
Missing template sessions/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}. Searched in:
* "/Users/Ladarris/rails_projects/sample_app/app/views"
# ./spec/requests/authentication_pages_spec.rb:24:in `block (3 levels) in <top (required)>'
4) Authentication with valid information
Failure/Error: click_button "Sign in"
ActionView::MissingTemplate:
Missing template sessions/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}. Searched in:
* "/Users/Ladarris/rails_projects/sample_app/app/views"
# ./spec/requests/authentication_pages_spec.rb:24:in `block (3 levels) in <top (required)>'
Finished in 0.71396 seconds
42 examples, 4 failures
I'm aware the the error message implies that I am missing app/views/sessions/create.html.erb
however its supposed to be looking in app/views/sessions/new.html.erb
as stated by the tutorial.
Whenever I go ahead and create a app/views/sessions/create.html.erb
the following error messages are returned.
Failures:
1) Authentication with valid information
Failure/Error: it { should have_link('Profile', href: user_path(user), visible: false) }
expected #has_link?("Profile", {:href=>"/users/1", :visible=>false}) to return true, got false
# ./spec/requests/authentication_pages_spec.rb:27:in `block (3 levels) in <top (required)>'
2) Authentication with valid information
Failure/Error: it { should have_link('Sign out', href: signout_path) }
expected #has_link?("Sign out", {:href=>"/signout"}) to return true, got false
# ./spec/requests/authentication_pages_spec.rb:28:in `block (3 levels) in <top (required)>'
3) Authentication with valid information
Failure/Error: it { should have_title(user.name) }
expected #has_title?("John Smith") to return true, got false
# ./spec/requests/authentication_pages_spec.rb:26:in `block (3 levels) in <top (required)>'
Below are copies of my code. ___________________
Rspec Test
require 'spec_helper'
describe "Authentication" do
subject { page }
describe "signin page" do
before { visit signin_path }
it { should have_content('Sign in') }
it { should have_title('Sign in') }
end
describe "signin" do
before { visit signin_path }
describe "with invalid information" do
before { click_button "Sign in" }
it { should have_title('Sign in') }
it { should have_selector('div.alert.alert-error', text: 'Invalid') }
end
end
describe "with valid information" do
let(:user) { FactoryGirl.create(:user) }
before do
visit signin_path
fill_in "Email", with: user.email.upcase
fill_in "Password", with: user.password
click_button "Sign in"
end
it { should have_title(user.name) }
it { should have_link('Profile', href: user_path(user), visible: false) }
it { should have_link('Sign out', href: signout_path) }
it { should_not have_link('Sign in', href: signin_path) }
end
end
Sessions Controller
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
else
flash.now[:error] = 'Invalid email/password combination'
render 'new'
end
end
def destroy
end
end
app/views/session/new.html.erb
<% provide(:title, "Sign in") %>
<h1>Sign in</h1>
<div class="row">
<div class="span6 offset3">
<%= form_for(:session, url: sessions_path) do |f| %>
<%= f.label :email %>
<%= f.text_field :email %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.submit "Sign in", class: "btn btn-large btn-primary" %>
<% end %>
<p>New user? <%= link_to "Sign up now!", signup_path %></p>
</div>
</div>
routes.rb
SampleApp::Application.routes.draw do
resources :users
resources :sessions, only: [:new, :create, :destroy]
root to: 'static_pages#home'
match '/signup', to: 'users#new', via: 'get'
match '/signin', to: 'sessions#new', via: 'get'
match '/signout', to: 'sessions#destroy', via: 'delete'
match '/help', to: 'static_pages#help', via: 'get'
match '/about', to: 'static_pages#about', via: 'get'
match '/contact', to: 'static_pages#contact', via: 'get'
# The priority is based upon order of creation: first created -> highest priority.
# See how all your routes lay out with "rake routes".
# You can have the root of your site routed with "root"
# root to: 'welcome#index'
# Example of regular route:
# get 'products/:id' => 'catalog#view'
# Example of named route that can be invoked with purchase_url(id: product.id)
# get 'products/:id/purchase' => 'catalog#purchase', as: :purchase
# Example resource route (maps HTTP verbs to controller actions automatically):
# resources :products
# Example resource route with options:
# resources :products do
# member do
# get 'short'
# post 'toggle'
# end
#
# collection do
# get 'sold'
# end
# end
# Example resource route with sub-resources:
# resources :products do
# resources :comments, :sales
# resource :seller
# end
# Example resource route with more complex sub-resources:
# resources :products do
# resources :comments
# resources :sales do
# get 'recent', on: :collection
# end
# end
# Example resource route within a namespace:
# namespace :admin do
# # Directs /admin/products/* to Admin::ProductsController
# # (app/controllers/admin/products_controller.rb)
# resources :products
# end
end
Upvotes: 0
Views: 1093
Reputation: 51
Make sure controller has the if statement fulfilled --> app/controller/users_controller.rb
def create
@user = User.new(user_params)
if @user.save
redirect_to @user #This statement is important
else
render 'new'
end
end
Upvotes: 0
Reputation: 29439
It is looking in new.html.erb
, but when it gets to the f.submit
in that view, another request is generated and it executes the create
method in your sessions controller. However, you don't have any code for the if
branch (i.e. when the user exists), so it takes the default action of trying to render a view by the name of create
.
If you check carefully, I suspect you'll find that you've not implemented some of the code that the tutorial calls for you to implement at the point you are in the tutorial.
Upvotes: 1