webentwicklung-frage-antwort-db.com.de

Richtige Prüfung von "Assoziationen" mit Rspec?

Ich versuche folgendes Szenario zu testen:

-> Ich habe ein Modell namens Team, das gerade dann sinnvoll ist, wenn es von einem Benutzer erstellt wurde. Daher muss jede Teaminstanz mit einem Benutzer verknüpft sein.

Um das zu testen, habe ich Folgendes getan:

describe Team do

...

  it "should be associated with a user" do
    no_user_team = Team.new(:user => nil)
    no_user_team.should_not be_valid
  end

...

end

Was zwingt mich, das Teammodell zu ändern als:

class Team < ActiveRecord::Base
  # Setup accessible (or protected) attributes for your model
  attr_accessible :name, :user

  validates_presence_of :name
  validates_presence_of :user

  belongs_to :user
end

Scheint das für Sie richtig? Ich mache mir nur Sorgen, das Benutzerattribut als zugänglich zu machen (Massenzuordnung). 

42
Hommer Smith

Ich verwende normalerweise diesen Ansatz:

describe User do
  it "should have many teams" do
    t = User.reflect_on_association(:teams)
    expect(t.macro).to eq(:has_many)
  end
end

Eine bessere Lösung wäre die Verwendung des Edelsteins shoulda , mit dem Sie einfach Folgendes tun können:

describe Team do
  it { should belong_to(:user) }
end
58
Luís Ramalho
  it { Idea.reflect_on_association(:person).macro.should  eq(:belongs_to) }
  it { Idea.reflect_on_association(:company).macro.should eq(:belongs_to) }
  it { Idea.reflect_on_association(:votes).macro.should   eq(:has_many) }
25
urbanczykd
class MicroProxy < ActiveRecord::Base
    has_many :servers
end

describe MicroProxy, type: :model do
    it { expect(described_class.reflect_on_association(:servers).macro).to eq(:has_many) }
end
0
juliangonzalez

Sie können dies am einfachsten tun.

it { expect(classroom).to have_many(:students) }
it { expect(user).to have_one(:profile }

ein nützlicher Link als Referenz. https://Gist.github.com/kyletcarlson/6234923

0
Aleem