Rails 4 使用 Devise,使用 Rspec 测试控制器
Rails 4 with Devise, testing Controllers with Rspec
我是 RSpec 测试的新手,目前正在尝试为 Rails 4 应用程序向现有控制器添加测试。
这是 Github 应用程序 link,如果您需要更多详细信息: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
但看起来 "resource" 永远不会被删除:
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 操作的正确方法是什么
谢谢!
您在规范中的 resource
已经加载,并且在从数据库中删除该行时不会更改。你可以做几件事:
测试资源是否从数据库中消失
expect(Resource.find_by(id: resource.id)).to be_nil
测试数据库计数变化
expect { delete :destroy, id: resource.id }.to change(Resource, :count).by(-1)
我是 RSpec 测试的新手,目前正在尝试为 Rails 4 应用程序向现有控制器添加测试。 这是 Github 应用程序 link,如果您需要更多详细信息: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
但看起来 "resource" 永远不会被删除:
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 操作的正确方法是什么谢谢!
您在规范中的 resource
已经加载,并且在从数据库中删除该行时不会更改。你可以做几件事:
测试资源是否从数据库中消失
expect(Resource.find_by(id: resource.id)).to be_nil
测试数据库计数变化
expect { delete :destroy, id: resource.id }.to change(Resource, :count).by(-1)