Ruby on rails 如何在rails中编写destroy方法的测试用例?
它正在显示Action view::template missing错误我不能为rails中的void Action(nothing/render nothing)方法编写测试用例 现在,我更改了呈现json值的方法Ruby on rails 如何在rails中编写destroy方法的测试用例?,ruby-on-rails,ruby-on-rails-4,rspec,Ruby On Rails,Ruby On Rails 4,Rspec,它正在显示Action view::template missing错误我不能为rails中的void Action(nothing/render nothing)方法编写测试用例 现在,我更改了呈现json值的方法 #Destroy Action method def destroy Key.destroy(params[:id]) end ------------------------------- #testcase for this expect(delete :destroy
#Destroy Action method
def destroy
Key.destroy(params[:id])
end
-------------------------------
#testcase for this
expect(delete :destroy ,{"id"=>"3"}).to change(Key, :count).by(-1)
现在,我对运行测试用例的断言是:
def destroy
Key.destroy(params[:id])
respond_to do |format|
format.html {}
format.json { head :no_content }
end
end
您可以使用工厂(例如Factory Girl)创建一个示例项,然后检查它是否存在。这是一个示例销毁测试(查询是针对Mongoid db的,但您可以得到它)。 在我的例子中,我的destroy方法有一个json响应,也可以检查它(但我在这里不这么做)
具体说明您的错误。在此处包括完整错误。此外,您如何设置RSpec断言也会有所帮助。此外,如果您允许销毁实体,从逻辑上讲,如果被销毁的实体是用户正在与之交互的实体,则重定向到标准的show操作是有意义的。您的操作不会't“render nothing”-这就是错误的症结所在。我知道错误,但我试图为上面的销毁函数编写代码。但我意识到它必须从控制器操作中给出一些响应。最后我呈现“format.json{head:no_content}”如果成功删除。我的第一个断言没有问题。但是控制器操作必须在返回json响应时返回一些响应。这是Actionview::template丢失错误的原因。我明白了。那么更新的销毁操作看起来很好。如果不想重新加载页面,则必须使用ajax并检查来自控制器的json响应。这超出了您的测试范围,您需要解释在销毁该项时要执行的操作(重新加载、转到索引等)。
it "should destroy" do
response=delete :destroy ,{"id"=>"3"}
expect(response).to have_http_status(204)
end
let(:key_to_delete) {FactoryGirl.create(:key)}
it 'should destroy' do
delete :destroy, id: key_to_delete.id
expect(Key.where(id: key_to_delete.id).count).to eq(0)
end