在控制器和视图中更改实例变量的名称会破坏rspec测试

时间:2017-03-20 14:31:54

标签: ruby-on-rails rspec

我对一个实例变量有一个非常奇怪的情况。我在控制器中,我有这个动作

def index
  @categories = Category.main_categories
end

在视图中我有这个

<% @categories.each do |category| %>
  ...
<% end %>

并且像魅力一样工作

当我将变量名称从@categories更改为@main_categories时(在控制器和视图中)我收到此错误

ActionView::Template::Error: undefined method 'each' for nil:NilClass

我尝试了同样的(更改实例变量的名称)与其他控制器和视图,它的工作原理。

这只发生在测试环境中, 在开发环境中它可以工作

我的测试文件:

require "rails_helper"

RSpec.feature "Dashboard categories", :type => :feature do

let!(:menu_1) { create(:category) }
let!(:menu_2) { create(:dso) }
let!(:menu_3) { create(:stargazing) }
let!(:sub_menu_1_a) { create(:planets) }
let!(:sub_menu_1_b) { create(:asteroid) }
let!(:sub_sub_menu_1_a) { create(:mars) }
let!(:user) { create(:user) }

context "when visited by a not authorized user, " do
    scenario "it should contains a message to sign in" do
        visit "/dashboard/categories"
        expect(page).to have_text(/You need to sign in or sign up before continuing/)
    end
end

context "when visited by an authorized user," do
    before do
        sign_in user
        visit "/dashboard/categories"
    end

    scenario "it should contains all main and sub categories" do
        expect(page).to have_css('tr', count: 6)
        expect(page).to have_css('tr.subcategory', count: 3)
    end
end

end

知道我做错了什么吗?

0 个答案:

没有答案