Failure/Error: get :index NoMethodError: undefined method `<=' for nil:NilClass
Failure/Error: get :index NoMethodError: undefined method `<=' for nil:NilClass
我希望这不是一个特定的错误,它可能是一个对其他人也有帮助的逻辑错误。
我想测试我的控制器索引方法,我有一个带有活动记录查询的之前方法。问题是我不知道我的测试有什么问题,因为我只在使用 rspec 而不是在我手动测试时得到这个错误。
控制器
class BlogsController < ApplicationController
before_filter :archive_months
def archive_months
@months = Blog.find(:all, :select=>:publish_date, :order=>"publish_date DESC")
.select{ |p| p.publish_date <= Date.today }
.group_by{ |p| [p.year, p.month, p.publish_date.strftime("%B")] }
end
测试
require 'rails_helper'
RSpec.describe BlogsController, :type => :controller do
before(:each) do
@post1 = create(:blog)
end
describe "GET #index" do
it "shows all blog posts" do
get :index
expect(response).to have_http_status(200)
end
end
end
测试输出
1) BlogsController GET #index shows all blog posts
Failure/Error: get :index
NoMethodError:
undefined method `<=' for nil:NilClass
# ./app/controllers/blogs_controller.rb:178:in `block in archive_months'
# ./app/controllers/blogs_controller.rb:177:in `select'
# ./app/controllers/blogs_controller.rb:177:in `archive_months'
如果我 运行 页面上或 rails 控制台中的 @months 查询它运行良好,但在我的测试中不起作用。
您的测试数据库中似乎有一个或多个 Blog
对象没有 publish_date
属性集。这就是 .select{ |p| p.publish_date <= Date.today }
引发错误的原因。
我希望这不是一个特定的错误,它可能是一个对其他人也有帮助的逻辑错误。
我想测试我的控制器索引方法,我有一个带有活动记录查询的之前方法。问题是我不知道我的测试有什么问题,因为我只在使用 rspec 而不是在我手动测试时得到这个错误。
控制器
class BlogsController < ApplicationController
before_filter :archive_months
def archive_months
@months = Blog.find(:all, :select=>:publish_date, :order=>"publish_date DESC")
.select{ |p| p.publish_date <= Date.today }
.group_by{ |p| [p.year, p.month, p.publish_date.strftime("%B")] }
end
测试
require 'rails_helper'
RSpec.describe BlogsController, :type => :controller do
before(:each) do
@post1 = create(:blog)
end
describe "GET #index" do
it "shows all blog posts" do
get :index
expect(response).to have_http_status(200)
end
end
end
测试输出
1) BlogsController GET #index shows all blog posts
Failure/Error: get :index
NoMethodError:
undefined method `<=' for nil:NilClass
# ./app/controllers/blogs_controller.rb:178:in `block in archive_months'
# ./app/controllers/blogs_controller.rb:177:in `select'
# ./app/controllers/blogs_controller.rb:177:in `archive_months'
如果我 运行 页面上或 rails 控制台中的 @months 查询它运行良好,但在我的测试中不起作用。
您的测试数据库中似乎有一个或多个 Blog
对象没有 publish_date
属性集。这就是 .select{ |p| p.publish_date <= Date.today }
引发错误的原因。