これらのツールのいくつかを初めて使用しています。私はドキュメントを読みましたが、ここで私が達成しようとしていることを正確に尋ねたかったのです。
コントローラー仕様で実行できるいくつかのアクションをテストしたい一連のユーザーがいます。各ユーザーが作成されると、関連付けられたオブジェクトを作成するために発生する一連のコールバックがあります。
これらのユーザー インスタンスと、その ActiveRecord クラスの関連オブジェクトにアクセスしたいと考えています。たとえば、ユーザーには一連のリストがあるため、たとえば user1.lists を呼び出せるようにしたいと考えています。
また、このセットアップを上部に分離して、レッツまたはビフォア ブラックのいずれかを使用したいと思います。次のように let を呼び出すだけのようです。
# will test that get_count_for_list will return 5
describe ApiController do
# why same name - seems really confusing!
let(:user) { FactoryGirl.create(:user) }
let(:user2) { FactoryGirl.create(:user2) }
関連するコールバックを呼び出しません。これは正しいです?それともタイミングの問題でしょうか?
let を使用して、user.id などの ExampleGroups でこれらのオブジェクトにアクセスできる構文が気に入っていますが、user.lists にはアクセスできません。現在、私は次のようなことをしています:
# will test that get_count_for_list will return 5
describe ApiController do
# why same name - seems really confusing!
let(:user) { FactoryGirl.create(:user) }
let(:user2) { FactoryGirl.create(:user2) }
let(:user3) { FactoryGirl.create(:user3) }
before do
FactoryGirl.create(:user2)
FactoryGirl.create(:user3)
end
しかし、もっと良い方法が必要だと感じています。これらのユーザーを 2 回作成していますか?
どうも
編集 1
ここで問題のコードを分離しました。global_id 値は、コールバックを介して作成されます。データベースに正しく存在し、対応する find_by_email を介してアクセスできますが、user2 変数を使用してもアクセスできません。
require 'spec_helper'
# will test that get_count_for_list will return 5
describe ApiController do
# why same name - seems really confusing!
let!(:user) { FactoryGirl.create(:user) }
let!(:user2) { FactoryGirl.create(:user2) }
let!(:user3) { FactoryGirl.create(:user3) }
before do
session[:user_id]=user.id # works
end
describe 'FOLLOW / UNFOLLOW options' do
it 'shall test the ability to follow another user' do
puts "user1: " + user.global_id.to_s # doesn't output anything
u2=User.find_by_email('jo@jo.com') # corresponds to user2
post :follow, :global_id => user2.global_id # doesn't work
#post :follow, :global_id => u2.global_id #works
u3=User.find_by_email('su@su.com')
puts "user_3" + u3.global_id.to_s # outputs correct value
post :follow, :global_id => user3.global_id #doesn't work
#post :follow, :global_id => u3.global_id # works
post :unfollow, :global_id => user.following.sample(1)
response.code.should eq('200')
end
end
end