Rails 4 dengan Rancangan, menguji Pengontrol dengan Rspec

Saya baru dalam pengujian RSpec dan saat ini mencoba menambahkan tes ke pengontrol yang ada untuk aplikasi Rails 4. Berikut ini tautan aplikasi Github, jika Anda memerlukan detail lebih lanjut: https://github.com/iacobson/Zero2Dev

resource_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

tapi sepertinya "sumber daya" tidak pernah dihapus:

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

Saya mencoba banyak pilihan lain dari tutorial Rancangan atau dari tutorial atau jawaban lain yang saya temukan di internet, tetapi semuanya berakhir dengan kesalahan. Saya bahkan mencoba menghilangkan validasi pengguna_saat ini dari pengontrol, tetapi tidak ada peluang.

Apa cara yang benar untuk menguji tindakan Hancurkan di pengontrol, menggunakan Rails4, Rancangan, dan Rspec

Terima kasih !


person iacobSon    schedule 07.05.2015    source sumber


Jawaban (1)


resource yang Anda miliki dalam spesifikasi Anda sudah dimuat dan tidak berubah ketika baris dihapus dari DB. Anda dapat melakukan beberapa hal:

Uji apakah sumber daya telah hilang dari DB

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

Uji apakah jumlah DB berubah

expect { delete :destroy, id: resource.id }.to change(Resource, :count).by(-1)
person Kristján    schedule 07.05.2015
comment
Terima kasih! Itu sangat masuk akal, dan pertanyaan saya sangat konyol... Saya mencari kesalahan di tempat yang salah. - person iacobSon; 07.05.2015
comment
Saya pasti sudah sering melakukan ini pada diri saya sendiri :-D Hal-hal sederhana selalu membuat Anda tersandung paling lama. - person Kristján; 07.05.2015