当我试图告诉Capybara visit ('/')
时,我有以下失败的测试。
1) Credits when user is non-enabled show user credits available at the top.
Failure/Error: visit ('/')
NoMethodError:
undefined method `tag?' for nil:NilClass
# ./app/controllers/application_controller.rb:16:in `set_current_tag'
# ./spec/requests/credits_spec.rb:12:in `block (3 levels) in <top (required)>'
ApplicationController
中的代码如下所示
def set_current_site
current_host = request.host
@site = Site.where(domain: current_host).first
@site = Site.where(domain: 'mysiste.com').first unless @site.present?
end
def set_current_tag
if @site.tag? && Dvd.tagged_with(@site.tag, wild: true, any: true).any?
@site.tag = @site.tag
elsif params[:tag] && Dvd.tagged_with(params[:tag], wild: true, any: true).any?
@site.tag = params[:tag]
else
@site.tag = ''
end
end
我在这方面有点迷失,如何解决这个问题以及什么是理想的解决方案。我是否应该将实例变量的设计更改为方法并使用FactoryGirl for Site?
Site模型非常简单。
class Site < ActiveRecord::Base
attr_accessible :domain, :content, :program, :tag, :locale, :parent, :title, :landing
validates_presence_of :domain
validates_uniqueness_of :domain
end
工厂是
FactoryGirl.define do
factory :site do
domain "dvdstore.com"
title "DVD Store"
program "premium"
content "movies"
end
end
答案 0 :(得分:1)
尝试添加到credits_spec.rb:
before do
@site = FactoryGirl.create(:site)
@request.host = @site.domain
end
默认情况下,请求主机为“www.example.com”,猜测您没有此域的站点记录。
未找到网站的回退(@site = Site.where(domain: 'mysiste.com').first unless @site.present?
)可能也不起作用:
mysiste.com
而不是mysite.com
因此,当您运行规范时,@ site不是fount而不是设置。