0

単にカピバラに指示しようとすると、次の失敗したテストがあります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
4

1 に答える 1

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」のdbエントリに依存していますが、各テストはデフォルトで空のDBから始まります。そのようなエントリを作成しましたか?
  2. ドメイン名にタイプミスがある可能性があります:mysiste.com代わりにmysite.com

したがって、スペックを実行するとき、@ siteはファウントではなく、設定されていません。

于 2012-09-18T19:22:45.987 に答える