2015-05-07 3 views
1

Я новичок в тестировании RSpec и в настоящее время пытаюсь добавить тесты к существующему контроллеру для приложения Rails 4. Вот приложение ссылка Github, в случае, если вам нужно больше информации: https://github.com/iacobson/Zero2DevRails 4 с Devise, тестирование Контроллеры с Rspec

resources_controller.rb

class ResourcesController < ApplicationController 
     before_action :authenticate_user!, only:[:new, :create, :destroy] 

      def destroy 
      @resource = current_user.resources.find(params[:id]) 
      @resource.destroy 
      redirect_to resources_path 
      end 

     private 

     def resource_params 
      params.require(:resource).permit(:content, :user_id) 
     end 
    end 

resources_controller_spec.rb

require 'rails_helper' 

RSpec.describe ResourcesController, type: :controller do 


    describe "DELETE #destroy" do 
    let(:user1) {User.create!(name:"John", email:"[email protected]", password:"password")} 
    let(:user2) {User.create!(name:"Mary", email:"[email protected]", password:"password")} 
    let(:resource){user1.resources.create!(content: "Neque porro quisquam est qui dolorem ipsum")} 


    it "deletes resource when user 1 (that created the resource) is logged-in" do 
     sign_in user1 
     delete :destroy, id: resource.id 
     puts resource.content 
     expect(resource.content).to be_nil 
    end  
    end   
end 

но выглядит как "ресурс" никогда не удаляются:

Failure/Error: expect(resource.content).to be_nil 
     expected: nil 
      got: "Neque porro quisquam est qui dolorem ipsum" 

Я пробовал много ot ее варианты из учебника Devise или из других уроков или ответов, которые я нашел в Интернете, но все закончилось ошибкой. Я даже попытался исключить проверку current_user у контроллера, но никаких шансов.

Что бы правильный способ проверить разрушающие действия в контроллере, используя Rails4, Завещание и RSpec

Спасибо!

ответ

1

resource У вас в вашем spec уже загружен и не изменяется, когда строка удаляется из БД. Вы можете сделать несколько вещей:

тест, что ресурс ушел из БД

expect(Resource.find_by(id: resource.id)).to be_nil 

Теста что количество DB изменяет

expect { delete :destroy, id: resource.id }.to change(Resource, :count).by(-1) 
+0

Спасибо! Это делает так много смысла, и мой вопрос так глупо ... Я искал совершенно неправильное место для ошибки. – iacobSon

+0

Я определенно сделал это для себя много в прошлом: -D Это всегда простые вещи, которые вас трогают дольше всех. –