gpt4 book ai didi

ruby-on-rails - 预期 : 1 time with any arguments received: 0 times with any argument

转载 作者:行者123 更新时间:2023-12-03 14:19:21 25 4
gpt4 key购买 nike

我正在测试 index我的行动 ProjectsController .

我正在使用 will_paginate gem,并且正在尝试编写一个 RSpec 测试,以确保在当前用户的项目projects_path 时调用 paginate 方法。

然而,我得到的结果不是我所期望的,我不知道为什么。

结果

Failure/Error: expect(user.projects).to receive(:paginate)
(#<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Project:0x00000004719ef0>).paginate(any args)
expected: 1 time with any arguments
received: 0 times with any arguments
# ./spec/requests/project_pages_spec.rb:82:in `block (3 levels) in <top (required)>'

项目#index
def index
if params[:search]
@projects = current_user.projects.search(params[:search]).paginate(:page => params[:page], :per_page => 13)
else
@projects = current_user.projects.paginate(:page => params[:page], :per_page => 13)
end
end

指标测试
describe "index" do

describe "pagination" do

let(:user) { FactoryGirl.create(:user) }
let(:client) { FactoryGirl.create(:client) }

before do
capybara_sign_in(user)
@project = Project.create(name: "Blog", fee: 550, client_id: client.id)
end

it "should call the paginate method" do
expect(user.projects).to receive(:paginate)
visit projects_path
end
end
end

请注意,我还没有写完测试,所以请省略任何评论:干燥代码等。

感谢您的帮助家伙/女孩! :)

最佳答案

失败的原因是 user在您的规范文件中与 current_user 不同在您的 Controller 中。所以虽然current_user正在接收 paginate您的规范 user从来没有。几种方法你可以解决它。

你可以这样做:

expect_any_instance_of(User).to receive(:paginate)

这里的缺点是您正在测试任何实例,而不是专门针对您的 current_user实例。这是否是一个问题取决于你:)

另一种方法是 stub current_user :
controller.stub(:current_user).and_return(user)
expect(user.projects).to receive(:paginate)

好处是您正在测试完全相同的用户。缺点是 stub current_user可能会引入其他问题。

关于ruby-on-rails - 预期 : 1 time with any arguments received: 0 times with any argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32209823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com