【问题标题】:Rails 4 with Devise, testing Controllers with Rspec使用 Devise 的 Rails 4,使用 Rspec 测试控制器
【发布时间】:2015-05-07 16:11:45
【问题描述】:

我是 RSpec 测试的新手,目前正在尝试将测试添加到 Rails 4 应用程序的现有控制器。 这是 Github 应用链接,如果您需要更多详细信息:https://github.com/iacobson/Zero2Dev

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:"john@mail.com", password:"password")}
    let(:user2) {User.create!(name:"Mary", email:"mary@mail.com", 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"

我从 Devise 教程或我在互联网上找到的其他教程或答案中尝试了很多其他选项,但都以错误告终。 我什至试图从控制器中消除 current_user 验证,但没有机会。

使用 Rails4、Devise 和 Rspec 在控制器中测试 Destroy 操作的正确方法是什么

谢谢!

【问题讨论】:

    标签: ruby-on-rails rspec devise controller destroy


    【解决方案1】:

    您在规范中的resource 已经加载,并且在从数据库中删除该行时不会更改。你可以做几件事:

    测试资源是否从数据库中消失

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

    测试数据库计数是否变化

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

    【讨论】:

    • 谢谢!这很有意义,我的问题也很愚蠢......我在寻找错误的完全错误的地方。
    • 过去我确实对自己做过很多这样的事情:-D 最简单的事情总是让你绊倒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多