FactoryGirl, Rspec, laissez, et avant les problèmes

Je suis à l'aide de certains de ces outils pour la première fois. J'ai lu à travers les docs mais je voulais demander ici exactement ce que je suis en train de réaliser.

J'ai un ensemble d'utilisateurs que je veux tester certaines actions que je peux faire dans un contrôleur de spec. Lors de chaque utilisateur est créé, il y a un ensemble de rappels qui ont lieu pour créer des objets associés.

J'aimerais avoir accès à ces instances d'utilisateur et les objets associés de ActiveRecord classe. Ainsi, par exemple, un utilisateur disposera d'un ensemble de listes donc je voudrais être en mesure d'appeler user1.les listes par exemple.

Aussi, j'aimerais isoler cette configuration en haut et à l'utilisation soit de laisser ou d'un avant noir. Il semble que tout le qualifiant de laisser comme ceci:

# 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) }

ne pas appeler l'associé rappels. Est-ce correct? Ou est-il peut-être un problème de synchronisation?

J'aime la syntaxe d'utilisation de let et de pouvoir accéder à ces objets dans mon ExampleGroups de l'utilisateur.id, mais ne peut pas l'accès de l'utilisateur.les listes. Actuellement, je suis en train de faire quelque chose comme:

# 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

mais l'impression qu'il y a à être une meilleure façon. Je suis la création de ces de l'utilisateur deux fois?

thx

edit 1

J'ai isolé le code en question ici. Le global_id la valeur est créée par l'intermédiaire d'un rappel. Il existe correctement dans la base de données et peut être consulté via le correspondant find_by_email mais à l'aide de l'utilisateur2 var ne donnent pas accès.

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('[email protected]') # 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('[email protected]')
      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

source d'informationauteur timpone