[英]How to test my destroy action with RSpec?
在我的Rails应用程序中,如果user
要删除自己的帐户,则他首先必须在我的terminate
视图中输入密码:
<%= form_for @user, :method => :delete do |f| %>
<%= f.label :password %><br/>
<%= f.password_field :password %>
<%= f.submit %>
<% end %>
这是我的UsersController
:
def terminate
@user = User.find(params[:id])
@title = "Terminate your account"
end
def destroy
if @user.authenticate(params[:user][:password])
@user.destroy
flash[:success] = "Your account was terminated."
redirect_to root_path
else
flash.now[:alert] = "Wrong password."
render :terminate
end
end
问题是我似乎找不到用RSpec进行测试的方法。
我所拥有的是:
describe 'DELETE #destroy' do
before :each do
@user = FactoryGirl.create(:user)
end
context "success" do
it "deletes the user" do
expect{
delete :destroy, :id => @user, :password => "password"
}.to change(User, :count).by(-1)
end
end
end
但是,这给了我一个错误:
ActionView::MissingTemplate:
Missing template users/destroy, application/destroy with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder]}. Searched in:
* "#<RSpec::Rails::ViewRendering::EmptyTemplatePathSetDecorator:0x007fa7f51310d8>"
谁能告诉我我在这里缺少什么,或建议一种更好的方法来测试此操作?
谢谢你的帮助。
根据Rspec的文档 Views are stubbed by default
。 因此,我认为您应该在测试方法中添加controller.prepend_view_path 'users/destroy'
。
我播种的第一个错误是:
在销毁动作中,您具有params[:user][:password]
但是在测试中,您仅提供params[:id]
和params[:password]
在控制器中,您在before_filter
创建@user
吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.