Tin*_*n81 8 rspec ruby-on-rails ruby-on-rails-3
在我的Rails应用程序中,如果user想要删除自己的帐户,他首先必须在我的terminate视图中输入他的密码:
<%= form_for @user, :method => :delete do |f| %>
<%= f.label :password %><br/>
<%= f.password_field :password %>
<%= f.submit %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
这是我的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
Run Code Online (Sandbox Code Playgroud)
问题是我似乎找不到用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
Run Code Online (Sandbox Code Playgroud)
但是,这给了我一个错误:
ActionView::MissingTemplate:
Missing template users/destroy, application/destroy with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder]}. Searched in:
* "#<RSpec::Rails::ViewRendering::EmptyTemplatePathSetDecorator:0x007fa7f51310d8>"
Run Code Online (Sandbox Code Playgroud)
任何人都能告诉我我在这里缺少什么或建议更好的方法来测试这个动作吗?
谢谢你的帮助.
Tin*_*n81 12
好的,这是我的解决方案:
describe 'DELETE #destroy' do
context "success" do
it "deletes the user" do
expect{
delete :destroy, :id => @user, :user => {:password => @user.password}
}.to change(User, :count).by(-1)
end
end
end
Run Code Online (Sandbox Code Playgroud)
before :each我以前的电话是无用的(毕竟这不是一个集成测试).密码必须像这样传递:在:user => {:password => @user.password}阅读此主题之前我不知道.
| 归档时间: |
|
| 查看次数: |
14060 次 |
| 最近记录: |