Rails: Minitest&Carrierwave ActionView::Template::Error: undefined method `file_name' for nil:NilClass
Rails: Minitest&Carrierwave ActionView::Template::Error: undefined method `file_name' for nil:NilClass
我正在尝试为一个应用程序编写测试,该应用程序使用载波进行图像上传。该应用程序正在运行。我只是从非常简单的控制器测试开始。
例如,尝试通过
测试 root 时
test "should get root" do
get root_path
assert_response :success
end
我收到以下错误消息:
ERROR PagesControllerTest#test_should_get_root (1.52s)
Minitest::UnexpectedError: ActionView::Template::Error: undefined method `file_name' for nil:NilClass
app/views/pages/manifesto.html.erb:1
test/controllers/pages_controller_test.rb:6:in `block in <class:PagesControllerTest>'
冒犯的观点是:
<div class="" style="background: url(<%= @hero.file_name.url(:image2000) %>) no-repeat center center; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover;">
</div>
我有以下相关灯具:
page_sections.yml
one:
title: MyString
page: MyString
description: MyString
two:
title: MyString
page: MyString
description: MyString
...
page_section_images.yml
one:
page_section: One
image: One
two:
page_section: Two
image: Two
...
images.yml
one:
file_name: MyString
title: MyString
alt: MyString
author: MyString
copyright: MyString
two:
file_name: MyString
title: MyString
alt: MyString
author: MyString
copyright: MyString
我知道他在尝试渲染视图时没有获得背景图像。为什么?我必须做什么才能检验我的观点?我目前没有测试上传。正如我所说,页面呈现正确,只有测试抛出此错误。
希望有人能帮帮我。
编辑/pages_controller:
class PagesController < ApplicationController
def manifesto
@intro_hero = Image.joins(:page_section_images).where('page_section_images.page_section_id' => '1').order("RAND()").uniq.first
@intro_section = PageSection.where(id: 1).select("id, description, title").first
@hero = Image.joins(:page_section_images).where('page_section_images.page_section_id' => '2').order("RAND()").uniq.first
@section = PageSection.where(id: 2).select("id, description, title").first
...
end
...
end
在我的应用程序中,我有 11 个页面部分,因此我在 page_section 夹具中定义了 11 个条目,在 page_section_images 夹具中定义了 11 个条目。我是编写测试和设置测试的新手。
感谢 Christos-Angelos Vasilopoulos 的提示,我得以解决它。问题与我的灯具中的正确数据有关。
在我的例子中,一些控制器和模型具有与我数据库中的精确条目相关的逻辑。例如“where('page_section_images.page_section_id' => '2')”之类的东西。
在编写固定装置时,我必须在代码中使用我需要的整数值来指定 id。否则 Minitest 会写下他的值,而我的代码不会接受这些值。
我有这样的代码:“.order("RAND()").uniq.first”。为了使其可测试,我需要至少两个可以排序、随机化等的条目...
这意味着需要彻底编写 fixtures 并牢记代码。
我正在尝试为一个应用程序编写测试,该应用程序使用载波进行图像上传。该应用程序正在运行。我只是从非常简单的控制器测试开始。
例如,尝试通过
测试 root 时test "should get root" do
get root_path
assert_response :success
end
我收到以下错误消息:
ERROR PagesControllerTest#test_should_get_root (1.52s)
Minitest::UnexpectedError: ActionView::Template::Error: undefined method `file_name' for nil:NilClass
app/views/pages/manifesto.html.erb:1
test/controllers/pages_controller_test.rb:6:in `block in <class:PagesControllerTest>'
冒犯的观点是:
<div class="" style="background: url(<%= @hero.file_name.url(:image2000) %>) no-repeat center center; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover;">
</div>
我有以下相关灯具:
page_sections.yml
one:
title: MyString
page: MyString
description: MyString
two:
title: MyString
page: MyString
description: MyString
...
page_section_images.yml
one:
page_section: One
image: One
two:
page_section: Two
image: Two
...
images.yml
one:
file_name: MyString
title: MyString
alt: MyString
author: MyString
copyright: MyString
two:
file_name: MyString
title: MyString
alt: MyString
author: MyString
copyright: MyString
我知道他在尝试渲染视图时没有获得背景图像。为什么?我必须做什么才能检验我的观点?我目前没有测试上传。正如我所说,页面呈现正确,只有测试抛出此错误。
希望有人能帮帮我。
编辑/pages_controller:
class PagesController < ApplicationController
def manifesto
@intro_hero = Image.joins(:page_section_images).where('page_section_images.page_section_id' => '1').order("RAND()").uniq.first
@intro_section = PageSection.where(id: 1).select("id, description, title").first
@hero = Image.joins(:page_section_images).where('page_section_images.page_section_id' => '2').order("RAND()").uniq.first
@section = PageSection.where(id: 2).select("id, description, title").first
...
end
...
end
在我的应用程序中,我有 11 个页面部分,因此我在 page_section 夹具中定义了 11 个条目,在 page_section_images 夹具中定义了 11 个条目。我是编写测试和设置测试的新手。
感谢 Christos-Angelos Vasilopoulos 的提示,我得以解决它。问题与我的灯具中的正确数据有关。
在我的例子中,一些控制器和模型具有与我数据库中的精确条目相关的逻辑。例如“where('page_section_images.page_section_id' => '2')”之类的东西。 在编写固定装置时,我必须在代码中使用我需要的整数值来指定 id。否则 Minitest 会写下他的值,而我的代码不会接受这些值。
我有这样的代码:“.order("RAND()").uniq.first”。为了使其可测试,我需要至少两个可以排序、随机化等的条目...
这意味着需要彻底编写 fixtures 并牢记代码。