Ruby on rails ActionView::Template::Error:未定义的方法`image\uURL';对于nil:NilClass,在使用rspec-rails进行集成测试时
我是rails的初学者,我正在尝试测试我的rails应用程序 我的页面工作正常,但是在进行集成测试时,我遇到了这个错误Ruby on rails ActionView::Template::Error:未定义的方法`image\uURL';对于nil:NilClass,在使用rspec-rails进行集成测试时,ruby-on-rails,rspec,integration-testing,Ruby On Rails,Rspec,Integration Testing,我是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:
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
nil:NilClass的错误消息
未定义的方法“image\u url”似乎表明@article
在测试环境中是nil
。此环境与开发环境不同,开发环境及其类对象可能就是您在浏览器中看到的
我希望您可以通过在运行测试之前在测试环境中创建(至少)一篇文章来解决问题:
background do
User.create(name: 'Jane Doe', username: 'jodi')
Article.create(title: 'Your Title', etc...)
end
然后,本文将以与用户JaneDoe相同的方式在测试数据库中持久化
另一方面,您的特性测试似乎也在隐式测试(至少)索引的两个特性:是否存在与文章相关联的图像,以及是否存在注销按钮。如果可能的话,考虑分开这两个测试,或者至少对两者进行明确的测试。似乎没有文章存在。你能和我们分享测试代码吗?嘿@Didymus Orotayo我想你能做到:@article=article.unscoped.order(cached\u weighted\u total::desc)。控制器中的限制(1)
。这将返回1条记录(如果有)。参考资料:非常感谢您的见解
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
background do
User.create(name: 'Jane Doe', username: 'jodi')
Article.create(title: 'Your Title', etc...)
end