【问题标题】:capybara undefined method `tag?' for nil:NilClass水豚未定义方法“标签?”对于零:NilClass
【发布时间】:2012-09-19 03:22:45
【问题描述】:

当我试图告诉 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?

站点模型非常简单。

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

【问题讨论】:

  • @Trace 请查看站点模型的更新问题。
  • 你没有self.tag?您的站点模型中的方法....您在哪里得到这个
  • 您是否在规范中创建了域'mysiste.com' 的站点?
  • @dimuch 我做了。请查看我对工厂的更新问题。

标签: ruby-on-rails capybara bdd


【解决方案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?) 的后备可能也不起作用:

  1. 它依赖于域“mysiste.com”的数据库条目,但默认情况下每个测试都以空数据库开始。您创建过这样的条目吗?
  2. 域名可能有错字:mysiste.com 而不是mysite.com

因此,当您运行规范时,@site 不会被找到也不会被设置。

【讨论】:

  • 最终发现它的时间几乎与您回答的时间相同。谢谢!
猜你喜欢
  • 2016-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 2012-03-15
  • 2014-11-21
相关资源
最近更新 更多