Skip to content

Instantly share code, notes, and snippets.

@anithri
Last active December 12, 2015 01:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anithri/4694506 to your computer and use it in GitHub Desktop.
Save anithri/4694506 to your computer and use it in GitHub Desktop.
rspec scaffold/controller_spec template based o n Everyday Rails Testing with Rspec
require 'spec_helper'
describe <%= controller_class_name %>Controller do
# This should return the minimal set of attributes required to create a valid
# <%= class_name %>. As you add validations to <%= class_name %>, be sure to
# update the return value of this method accordingly.
def valid_attributes
attributes_for(:<%= file_name %>)
end
# This should return the minimal set of values that should be in the session
# in order to pass any filters (e.g. authentication) defined in
# <%= controller_class_name %>Controller. Be sure to keep this updated too.
def valid_session
{}
end
<% unless options[:singleton] -%>
describe "GET index" do
it "assigns all <%= table_name.pluralize %> as @<%= table_name.pluralize %>" do
<%= file_name %> = create(:<%= file_name %>)
get :index, {}, valid_session
assigns(:<%= table_name %>).should eq([<%= file_name %>])
end
it "renders the :index template" do
get :index
response.should render_template :index
end
end
<% end -%>
describe "GET show" do
before :each do
@<%= file_name %> = create(:<%= file_name %>)
end
it "assigns the requested <%= ns_file_name %> as @<%= ns_file_name %>" do
get :show, {id: @<%= file_name %>}, valid_session
assigns(:<%= ns_file_name %>).should eq(@<%= file_name %>)
end
it "renders the :show template" do
get :show, {id: @<%= file_name %>}, valid_session
response.should render_template :show
end
end
describe "GET new" do
it "assigns a new <%= ns_file_name %> as @<%= ns_file_name %>" do
get :new, {}, valid_session
assigns(:<%= ns_file_name %>).should be_a_new(<%= class_name %>)
end
it "renders the :new template" do
get :new, {}, valid_session
response.should render_template :new
end
end
describe "GET edit" do
before :each do
@<%= file_name %> = create(:<%= file_name %>)
end
it "assigns the requested <%= ns_file_name %> as @<%= ns_file_name %>" do
get :edit, {id: @<%= file_name %>}, valid_session
assigns(:<%= ns_file_name %>).should eq(@<%= file_name %>)
end
it "renders the :edit template" do
get :edit, {id: @<%= file_name %>}, valid_session
response.should render_template :edit
end
end
describe "POST create" do
describe "with valid params" do
it "creates a new <%= class_name %>" do
expect {
post :create, {<%= ns_file_name %>: valid_attributes}, valid_session
}.to change(<%= class_name %>, :count).by(1)
end
it "assigns a newly created <%= ns_file_name %> as @<%= ns_file_name %>" do
post :create, {<%= ns_file_name %>: valid_attributes}, valid_session
assigns(:<%= ns_file_name %>).should be_a(<%= class_name %>)
assigns(:<%= ns_file_name %>).should be_persisted
end
it "redirects to the created <%= ns_file_name %>" do
post :create, {<%= ns_file_name %>: valid_attributes}, valid_session
response.should redirect_to(<%= class_name %>.last)
end
end
describe "with invalid params" do
it "assigns a newly created but unsaved <%= ns_file_name %> as @<%= ns_file_name %>" do
# Trigger the behavior that occurs when invalid params are submitted
<%= class_name %>.any_instance.stub(:save).and_return(false)
post :create, {<%= ns_file_name %>: {}}, valid_session
assigns(:<%= ns_file_name %>).should be_a_new(<%= class_name %>)
end
it "re-renders the 'new' template" do
# Trigger the behavior that occurs when invalid params are submitted
<%= class_name %>.any_instance.stub(:save).and_return(false)
post :create, {<%= ns_file_name %>: {}}, valid_session
response.should render_template :new
end
end
end
describe "PUT update" do
before :each do
@<%= file_name %> = create(:<%= file_name %>)
end
it "assigns the requested <%= ns_file_name %> as @<%= ns_file_name %>" do
put :update, {id: @<%= file_name %>, <%= file_name %>: valid_attributes}, valid_session
assigns(:<%= file_name %>).should eq(@<%= file_name %>)
end
describe "with valid params" do
it "updates the requested <%= ns_file_name %>" do
pending "insert valid attribute name and valid value"
#put :update, {id: @<%= file_name %>, <%= file_name %>: attributes_for(:<%= file_name %>, ATTRIBUTE: GOOD VALUE }, valid_session
@<%= file_name %>.reload
#@<%= file_name %>.ATTRIBUTE.should eq GOOD_VALUE
end
it "redirects to the <%= ns_file_name %>" do
put :update, {id: @<%= file_name %>, <%= ns_file_name %>: valid_attributes}, valid_session
response.should redirect_to(@<%= file_name %>)
end
end
describe "with invalid params" do
it "assigns the <%= ns_file_name %> as @<%= ns_file_name %>" do
# Trigger the behavior that occurs when invalid params are submitted
pending "insert valid ATTRIBUTE and invalid BAD_VALUE"
#put :update, {id: @<%= file_name %>, attributes_for(:<%= ns_file_name %>, ATTRIBUTE: BAD_VALUE}, valid_session
#@<%= file_name %>.ATTRIBUTE.should_not eq BAD_VALUE
end
it "re-renders the 'edit' template" do
pending "insert valid ATTRIBUTE and invalid BAD_VALUE"
#put :update, {id: @<%= file_name %>, attributes_for(:<%= ns_file_name %>, ATTRIBUTE: BAD_VALUE}, valid_session
#response.should render_template("edit")
end
end
end
describe "DELETE destroy" do
before :each do
@<%= file_name %> = create(:<%= file_name %>)
end
it "destroys the requested <%= ns_file_name %>" do
expect {
delete :destroy, {id: @<%= file_name %>}, valid_session
}.to change(<%= class_name %>, :count).by(-1)
end
it "redirects to the <%= table_name %> list" do
delete :destroy, {id: @<%= file_name %>}, valid_session
response.should redirect_to(<%= index_helper %>_url)
end
end
end
@anithri
Copy link
Author

anithri commented Feb 1, 2013

put in lib/templates/rspec/scaffold

@anithri
Copy link
Author

anithri commented Feb 1, 2013

I think I'm a little inconsistant with file_name vs. ns_file_name, but as I haven't yet needed to use a namespace It's not important to me at the moment. I'll revise when I get to that situation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment