我想问为什么在运行rspec控制器测试时我总是得到零值? 我已经阅读了这个网站和大多数答案,因为复数词使用内部分配 但在我的情况下,这不起作用,我仍然有相同的价值 这是我的控制器
class ContactsController < ApplicationController
load_and_authorize_resource
before_action :find_contact, only: [:show,:edit,:update,:destroy]
def index
authorize! :index, Contact
@contact = Contact.accessible_by(current_ability)
# @contact = Contact.all
end
def show
end
def new
@contact = Contact.new
end
def edit
end
def create
@contact = current_user.contact.new(contact_params)
if @contact.save
redirect_to @contact
else
render 'new'
end
end
def update
# @contact = Contact.find(params[:id])
if @contact.update(contact_params)
redirect_to @contact
else
render 'edit'
end
end
def destroy
@contact.destroy
redirect_to contacts_path
end
private
def contact_params
params.require(:contact).permit(:firstname,
:lastname,
:alamat,
details_attributes: [:id, :number, :_destroy])
end
def find_contact
@contact = Contact.find(params[:id])
end
end
这是我简单的控制器测试
require 'rails_helper'
RSpec.describe ContactsController do
describe "Contact" do
it "succesfully create the contact" do
contact = FactoryGirl.create(:contact)
get :index
# byebug
expect(assigns(:contacts)).to eq([contact])
end
end
end
即使我将assigns(:contacts)
更改为assigns(:contact)
,我仍然拥有相同的价值。那我在哪里做错了?
请好好回答这个,非常感谢
答案 0 :(得分:1)
即使我将
assigns(:contacts)
更改为assigns(:contact)
我仍然得到了 相同的价值。那我在哪里做错了?
assigns
和assert_template
已被移除并提取到Rails 5中的gem。
答案 1 :(得分:0)
您有授权检查
authorize! :index, Contact
在分配到@contact
之前。
但是您的测试没有设置,以便以任何方式向请求用户授予权限。
为了发现这样的错误,在你展示的那个旁边进行额外的测试可能是有意义的。 E.g:
it "returns 200 (OK)" do
get :index
expect(response.response_code).to eq(200)
end