【发布时间】:2014-07-12 03:44:39
【问题描述】:
当我尝试使用 .reload 测试 Update 方法时,我的 rspec 测试失败。
错误
Admin::CompaniesController PUT update valid attributes changes @company's attributes
Failure/Error: @company.reload
TypeError:
no implicit conversion of nil into Hash
# ./spec/controllers/admin/admin_companies_controller_spec.rb:81:in `block (4 levels) in <top (required)>'
规范
# spec/controllers/admin_companies_controller_spec.rb
describe 'PUT update' do
before :each do
@company = create(:company, name: "Rockstars", phone: "3035551212")
end
context "valid attributes" do
it "changes @company's attributes" do
put :update, id: @company, company: attributes_for(:company, name: "Fishstars")
@company.reload #line 81
expect( @company.name ).to eq("Fishstars")
end
end
end
我也尝试过 (1) 使用 let!(),(同样的错误)
describe 'PUT update' do
let!(:company) { create(:company, name: "Rockstars", phone: "303555121d") }
context "valid attributes" do
it "changes company's attributes" do
put :update, id: company, company: attributes_for(:company, name: "Fishstars")
company.reload #line 81
expect( company.name ).to eq("Fishstars")
end
end
end
我也尝试过 (2)(同样的错误)
before :each do
@company = create(:company, name: "Rockstars", phone: "3035551212")
end
it "changes @company's attributes" do
@attr = { name: "Fishstars" }
put :update, id: @company.id, :company => @attr
@company.reload
expect( @company.name ).to eq("Fishstars")
end
我的第一个想法是变量@company 为 nil,但如果我注释掉第 81 行(指示),测试会按预期失败。
更新
在第 81 行之前插入“byebug”可以让我看到@company 的样子:
(byebug) @company
#<Company id: 1, name: "Rockstars", hq_address: "MyString", hq_city: "MyString", hq_state: "MyString", country: "MyString", description: "Description 1", phone: "3035551212", email: "Example2email@gmail.com", owner_id: 2, contact_name: "MyString", created_at: "2014-07-11 19:02:24", updated_at: "2014-07-11 19:02:24", active: true, logo_file_name: nil, logo_content_type: nil, logo_file_size: nil, logo_updated_at: nil, slug: "rockstars", refund_policy: "Refund policy">
(byebug) @company.reload
TypeError Exception: no implicit conversion of nil into Hash
nil
【问题讨论】:
-
您是否尝试过完全按照这个问题:stackoverflow.com/questions/9223336/…
-
我有,我收到了完全相同的错误。该尝试更新了问题。
标签: ruby-on-rails rspec