just run a scaffold and then added the correspondent tests. For some reason UPDATE and POST method are not working and respond with "nil". Cant find why. User Controller has the basic REST methods. ApplicationController includes a before_filter:
before_filter :authenticate_user
protected
def authenticate_user
unless User.find_by_id(session[:user_id])
redirect_to root_path, notice: "Please log in"
end
end
user_controller_spec:
describe "POST create" do
describe "with valid params" do
it "creates a new User" do
expect {
post :create, {:user => valid_attributes}, valid_session
}.to change(User, :count).by(1)
end
it "assigns a newly created user as @user" do
post :create, {:user => valid_attributes}
expect(assigns(:user)).to be_a(User)
expect(assigns(:user)).to be_persisted
end
it "redirects to the created user" do
post :create, {:user => valid_attributes}
expect(response).to redirect_to(User.last)
end
end
describe "with invalid params" do
it "assigns a newly created but unsaved user as @user" do
allow_any_instance_of(User).to receive(:save).and_return(false)
post :create, {:user => { "email" => "invalid value" }}
expect(assigns(:user)).to be_a_new(User)
end
it "re-renders the 'new' template" do
allow_any_instance_of(User).to receive(:save).and_return(false)
post :create, {:user => { "email" => "invalid value" }}
expect(response).to render_template("new")
end
end
end
describe "PUT update" do
describe "with valid params" do
it "updates the requested user" do
user = FactoryGirl.create(:user)
expect_any_instance_of(User).to receive(:update).with({ "email" => "user@email.com" })
put :update, {:id => team.to_param, :user => { "email" => "user@email.com" }}
end
it "assigns the requested user as @user" do
user = FactoryGirl.create(:user)
put :update, {:id => user.to_param, :user => valid_attributes}
expect(assigns(:user)).to eq(user)
end
it "redirects to the user" do
user = FactoryGirl.create(:user)
put :update, {:id => user.to_param, :user => valid_attributes}
expect(response).to redirect_to(user)
end
end
describe "with invalid params" do
it "assigns the user as @user" do
user = FactoryGirl.create(:user)
allow_any_instance_of(User).to receive(:save).and_return(false)
put :update, {:id => user.to_param, :user => { "email" => "invalid value" }}
expect(assigns(:user)).to eq(user)
end
it "re-renders the 'edit' template" do
user = FactoryGirl.create(:user)
allow_any_instance_of(User).to receive(:save).and_return(false)
put :update, {:id => user.to_param, :user => { "name" => "invalid value" }}
expect(response).to render_template("edit")
end
end
end
Try to add render_views
. Because RSpec tries to speed up specs and it does not render views by default.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.