gpt4 book ai didi

ruby-on-rails - 未定义方法 `ancestors' 在 PUT 上使用 rspec 测试

转载 作者:行者123 更新时间:2023-12-04 13:19:14 26 4
gpt4 key购买 nike

我正在使用 rspec、factory_girl 和 capybara 进行测试。该项目使用设计,我有以下方法在规范内登录:

def login_admin
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:admin]
sign_in FactoryGirl.create(:admin)
end
end

def login_user
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:user]
sign_in FactoryGirl.create(:user)
end

end

然后我对 company_controller_spec 执行测试:
require 'spec_helper'

describe CompaniesController, :type => :controller do

let(:valid_attributes) { { "email" => Faker::Internet.email } }

login_admin

describe "GET show" do

it "assigns the requested company as @company" do
company = FactoryGirl.create(:company)
get :show, {:id => company.to_param}
expect(assigns(:company)).to eq(company)
end
end

describe "GET edit" do
it "assigns the requested company as @company" do
company = FactoryGirl.create(:company)
get :edit, {:id => company.to_param}
expect(assigns(:company)).to eq(company)
end
end

describe "PUT update" do
describe "with valid params" do
it "updates the requested company" do
company = FactoryGirl.create(:company)
expect_any_instance_of(company).to receive(:update).with({ "email" => "r@gmail.com" })
put :update, {:id => company.to_param, :company => { "email" => "r@gmail.com" }}
end
end
end

但我不断收到这两个错误:
NoMethodError:
undefined method `ancestors' for #<Company:0x000000059b41f0>
# ./spec/controllers/companies_controller_spec.rb:34:in `block (4 levels) in <top (required)>'
line 34: expect_any_instance_of(company).to receive(:update).with({ "email" => "r@gmail.com" })


expected: #<Company id: 86...
got: nil
# ./spec/controllers/companies_controller_spec.rb:41:in `block (4 levels) in <top (required)>'
line 41: expect(assigns(:company)).to eq(company)

这是我的公司工厂:
FactoryGirl.define do
factory :company do
name { Faker::Name.name }
plan_id {}
phone { Faker::PhoneNumber.phone_number }
email { Faker::Internet.email }
facebook { Faker::Internet.url('facebook.com') }
twitter { Faker::Internet.url('twitter.com') }
linkedin { Faker::Internet.url('linkedin.com') }
web { Faker::Internet.url }
end
end

最佳答案

自己做的,不小心打了个电话expect_any_instance_of在实际实例上,而不是在类本身上。

老问题,但对于发现这个问题的其他人,看起来 OP 应该使用 Company (大写的类名)而不是 company (对实例的小写引用)。
expect_any_instance_of(Company).to receive(:update).with({ "email" => "r@gmail.com" })
为了更详细地解释错误,ancestors正在尝试访问 Company 所在的所有类继承。祖先/后代的好例子on this other SO question .

关于ruby-on-rails - 未定义方法 `ancestors' 在 PUT 上使用 rspec 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26023249/

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