【问题标题】:how to confirm if the object was deleted in rails-for-API?如何确认对象是否在 rails-for-API 中被删除?
【发布时间】:2021-09-24 13:00:14
【问题描述】:

我创建了一个destroy方法,现在我想知道如何测试和渲染对象是否被删除。

 def destroy
  if @syllabus.destroy
    render :no_content
  else 
  end
end

【问题讨论】:

  • test 你想为那个控制器方法写一个测试吗?或者像您想检查记录是否真的被删除然后向用户呈现一些页面一样测试和呈现?为什么你认为destroy 会失败?
  • 实际上我不知道如何在 Rails-for-API 中执行销毁方法。不知道自己创建的方法对不对

标签: ruby-on-rails ruby methods rails-api


【解决方案1】:

我认为您正在寻找类似rspec-rails 的东西, 在 gem 存储库上关注 installation instructions 之后,您可以生成一个测试文件:

bundle exec rails generate rspec:controller my_controller

这将生成如下文件:

# spec/controllers/my_controller_spec.rb
require 'rails_helper'

RSpec.describe MyControllerController, type: :controller do
# your code goes here...
end

然后你可以添加一个像这样的测试示例:

# spec/controllers/my_controller_spec.rb
require 'rails_helper'

RSpec.describe MyControllerController, type: :controller do
  #replace attr1 and attr2 with your own attributes
  let(:syllabus) { Syllabus.create(attr1: 'foo', attr2: 'bar') } 

  it 'removes syllabus from table' do
    expect { delete :destroy, id: syllabus.id }.to change { Syllabus.count }.by(-1)
  end
end

** 以上代码未经测试,仅供参考 **

你破坏动作方法没关系,但如果你离开它,你可以改进一点:

  def destroy
    @syllabus.destroy
  end

这是因为您的 if/else 条件对方法没有多大作用,并且默认情况下,rails 应该以 204 no content 响应

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    相关资源
    最近更新 更多