Тестирование уничтожения с помощью RSpec - PullRequest
0 голосов
/ 09 октября 2019

У меня это есть в контроллерах

   def destroy
        @post = Post.find(params[:id])
        @post.destroy
    end

Но я заблудился относительно того, как на самом деле проверить, работает ли он. Любые указатели будут высоко оценены! В настоящее время у меня есть это в моем файле RSpec:

require 'rails_helper'


RSpec.describe Post, type: :model do
  it "must have a title" do
    post= Post.create
    expect(post.errors[:title]).to_not be_empty
  end 
  it "must have a description" do
    post= Post.create
    expect(post.errors[:description]).to_not be_empty
  end 
  it "must have a location" do
    post= Post.create
    expect(post.errors[:location]).to_not be_empty
  end 
  it "must have an image" do
    post= Post.create
    expect(post.errors[:image]).to_not be_empty
  end 
  it "can be destroyed" do
    post= Post.destroy

  end 
end 

Ответы [ 2 ]

1 голос
/ 13 октября 2019

Вы можете проверить, изменилось ли количество вещей на -1, например:

expect { delete '/things', :thing => { :id => 123'} }.to change(Thing, :count).by(-1)

Это означает, что вы хотите иметь на одну вещь меньше, и убедитесь, что что-то было удалено. .

Если вы хотите убедиться, что конкретная «вещь» была удалена, вы можете создать ее перед тестом, передать идентификатор «вещи» в качестве параметра и убедиться, что его нет в базе данных, как этот:

thing = create(:thing)
delete '/things', :thing => { :id => thing.id'}

expect(Thing.find_by(id: thing.id)).to be_nil
0 голосов
/ 13 октября 2019

Как уже указывалось, если вы используете спецификации запросов (см. https://relishapp.com/rspec/rspec-rails/v/3-9/docs/request-specs/request-spec), вы можете легко вызвать API, который должен удалить модель, а затем выполнить запрос ActiveRecord, чтобы не ожидать результатов.

require "rails_helper"

RSpec.describe "delete thing api" do

  it "deletes thing" do

    // Create a thing with a factory of your choice here

    delete "/things", :thing => {:id => 1}

    expect(Thing.all.count).to be 0
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...