web-dev-qa-db-ja.com

Rails rspecでフィクスチャがロードされない

だから、私はRailsプロジェクトのコンテキストでrspecBDDテストフレームワークを学ぼうとしています。私が抱えている問題は、私が一生の間、得ることができないということですrspecの説明で正しくロードするための私のフィクスチャ。

免責事項:はい、使用する器具よりも優れたものがあります。ファクトリーガール、モカ、自動テストなどの関連ツールで遊ぶ前に、ここ(特にrspec)で一度に1つのことを学ぼうとしています。そのため、私はデッドシンプルを取得しようとしています。 、不格好な場合は、器具が機能しています。

とにかく、ここにコードがあります:

/test/fixtures/users.yml-

# password: "secret"
foo:
  username: foo
  email: [email protected]
  password_hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f
  password_salt: bef65e058905c379436d80d1a32e7374b139e7b0

bar:
  username: bar
  email: [email protected]
  password_hash: 3488f5f7efecab14b91eb96169e5e1ee518a569f
  password_salt: bef65e058905c379436d80d1a32e7374b139e7b0

/spec/controllers/pages_controller_spec.rb-

require 'spec/spec_helper'

describe PagesController do
  integrate_views
  fixtures :users
  it "should render index template on index call when logged in" do
    session[:user_id] = user(:foo).id
    get 'index' 
    response.should render_template('index')
  end
end

そして、「rakespec」を実行すると得られるものは次のとおりです。

NoMethodError in 'PagesController should render index template on index call when logged in'
undefined method `user' for #<Spec::Rails::Example::ControllerExampleGroup::Subclass_1:0x2405a7c>
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.5/lib/action_controller/test_process.rb:511:in `method_missing'
./spec/controllers/pages_controller_spec.rb:7:

つまり、「user(:foo)」を有効なメソッドとして認識していません。

フィクスチャ自体は問題ないはずです。「rakedb:fixtures:load」を介して開発データベースにロードすると、そのデータベースにfooとbarが存在することを確認できます。

ここで明らかな何かが欠けているような気がしますが、私は一日中髪を引き裂いて無駄にしています。どんな助けでもいただければ幸いです。

25
Fishtoaster

フィクスチャを「users」として定義する場合、それらを使用する方法は、同じ名前のメソッドを使用することです。

describe PagesController do
  integrate_views
  fixtures :users
  it "should render index template on index call when logged in" do
    session[:user_id] = users(:foo).id
    get 'index'
    response.should render_template('index')
  end
end

単数は、クラス自体(ユーザー)にのみ関連します。これが1文字のバグである場合は、まだ髪の毛が残っていることを願っています。

34
tadman

フィクスチャをグローバルにセットアップする場合は、spec_helperまたはRails_helper あなたは付け加えられます:

RSpec.configure do |config|
  config.global_fixtures = :all
end
10
lobati