问题描述
我是Rails的初学者,正在尝试测试Rails应用程序
User signs in with username
Failure/Error: <div class="art-img" style="background: url(<%= @article.image_url %>); background-size: 100% 100%; background-repeat: no-repeat; background-position: center">
ActionView::Template::Error:
undefined method `image_url' for nil:NilClass
这是视图模板,错误为 app / view / home / index
<div class="main-art-con">
<div class="art-img" style="background: url(<%= @article.image_url %>); background-size: 100% 100%; background-repeat: no-repeat; background-position: center">
<div class="content-con">
<h5 class="art-head"><%= @article.title %></h5>
<p class="art-con">
<%= truncate(@article.text,length: 100) %>
</p>
</div>
</div>
</div>
这是我的家庭控制器,其中包含对象实例
class HomeController < ApplicationController
def index
@featured_article = Article.unscoped.order(cached_weighted_total: :desc).limit(1)
@article = @featured_article.last
@categories = Category.all.ordered_by_priority
end
end
测试代码
require 'rails_helper'
feature 'User signs in' do
background do
User.create(name: 'Jane Doe',username: 'jodi')
end
scenario 'with username' do
visit login_path
fill_in 'Username',with: 'jodi'
click_on 'Log in'
expect(page).to have_content 'Log Out'
end
end
解决方法
错误消息undefined method `image_url' for nil:NilClass
似乎表明在 test 环境中@article
是nil
。此环境不同于 development 开发环境,并且开发环境及其类对象大概是您在浏览器中看到的。
我希望您可以通过在运行测试之前在测试环境中创建(至少)一篇文章 来解决问题:
background do
User.create(name: 'Jane Doe',username: 'jodi')
Article.create(title: 'Your Title',etc...)
end
然后,本文将以用户Jane Doe保留的相同方式保留在 test 数据库中。
顺便说一句,您的功能测试似乎也在隐式测试(至少)索引的两个功能:与文章关联的图像的存在和“注销”按钮的存在。如果可能,请考虑将这两个测试分开,或者至少对两者进行明确的测试。