Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在rails中编写destroy方法的测试用例?_Ruby On Rails_Ruby On Rails 4_Rspec - Fatal编程技术网

Ruby on rails 如何在rails中编写destroy方法的测试用例?

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

它正在显示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 ,{"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