Ich habe ein seltsames Problem. Ich habe eine Factory user_deals für einen Benutzer/Deal has_many/has_many Beziehung erstellt, aber es scheint wie rspec zwingt mich nun einen Benutzer zu behaupten, auch wenn ich keinen brauche (in der Tat Benutzer werden nur in meiner Datenbank geloggt und benötigt in der App, wenn ein Web-Besucher anmeldet)Problem mit Fabrik Mädchen Verein und Verwendung von:
Dieser Test funktioniert nicht:
context "As NON SIGNED-IN visitor" do
describe "HP card has the right content and behavior on small screens (1-column view)", :js => true do
let(:subject) { ApplicationController.new }
let(:deal_for_german_people) { create(:deal_skips_validate,
:country => "Germany",
:title => "title of deal for German people") }
let(:deal_for_german_people2) { create(:deal_skips_validate,
:country => "Germany",
:title => "title 2 of deal for German people") }
before do
resize_window_to_mobile
end
after do
resize_window_default
end
it "plus and minus icons behave correctly" do
visit root_path
# user sees on mobile the little "plus" icon by default
expect(page).to have_css('.card-detail-opener', visible: true)
end
end
Aber wenn ich erstellen (Add: user) und ich schaffen "user_deals", hat der Test. Aber ich bin im Kontext "nicht angemeldeter Benutzer", also warum sollte ich einen Benutzer und user_deals erstellen?
context "As NON SIGNED-IN visitor" do
describe "HP card has the right content and behavior on small screens (1-column view)", :js => true do
let(:subject) { ApplicationController.new }
let(:user) { create(:user,
user_country_name: 'Germany') }
let(:deal_for_german_people) { create(:deal_skips_validate,
:country => "Germany",
:title => "title of deal for German people") }
let(:deal_for_german_people2) { create(:deal_skips_validate,
:country => "Germany",
:title => "title 2 of deal for German people") }
before do
resize_window_to_mobile
create(:user_deal, user: user, deal: deal_for_german_people)
create(:user_deal, user: user, deal: deal_for_german_people2)
end
after do
resize_window_default
end
it "plus and minus icons behave correctly" do
visit root_path
# user sees on mobile the little "plus" icon by default
expect(page).to have_css('.card-detail-opener', visible: true)
end
end
auch noch den Grund dieser Seltsamkeit zu untersuchen, fand ich heraus, dass, wenn ich das „lassen:“ nicht verwenden, zu Beginn des Tests, sondern Variablen @deals innerhalb th bevor erstellen .. .do Block, funktioniert es ohne einen Benutzer zu schaffen (aber ich möchte rspec verwenden "lassen" rspec best practices trocknen und gelten)
describe "HP card has the right content and behavior on small screens (1-column view)", :js => true do
let(:subject) { ApplicationController.new }
before do
resize_window_to_mobile
@deal_for_german_people = FactoryGirl.build(:deal,
:country => "Germany",
:title => "title of deal for German people").save(validate: false)
@deal_for_german_people2 = FactoryGirl.build(:deal,
:country => "Germany",
:title => "title 2 of deal for German people").save(validate: false)
end
after do
resize_window_default
end
it "plus and minus icons behave correctly" do
visit root_path
expect(page).to have_css('.card-detail-opener', visible: true)
end
Modelle
class Deal < ActiveRecord::Base
has_many :user_deals, dependent: :destroy
has_many :users, through: :user_deals
end
class User < ActiveRecord::Base
has_many :user_deals
has_many :deals, through: :user_deals
end
class UserDeal < ActiveRecord::Base
belongs_to :user, :foreign_key => 'user_id'
belongs_to :deal, :foreign_key => 'deal_id'
end
Struktur der Tabelle user_deals
# Table name: user_deals
#
# id :integer not null, primary key
# user_id :integer
# deal_id :integer
# number_of_clicks :integer default(0)
# created_at :datetime
# updated_at :datetime
Fabrik Benutzer
FactoryGirl.define do
factory :user do
sequence(:email) { |n| "person#{n}@example.com" }
password "vddfdf"
password_confirmation "vddfdf"
confirmed_at Time.now
confirmation_token nil
trait :superadmin do
role :superadmin
end
trait :with_deals do
after(:create) do |user|
create_list(:deal, 5, user: user)
end
end
end
end
Fabrik user_deal
FactoryGirl.define do
factory :user_deal do
association :user
association :deal
trait :few_clicks do
number_of_clicks 1
end
trait :many_clicks do
number_of_clicks 4
end
end
end
, was der Fehler in rspec in Ihrem "Dieser Test ist nicht arbeiten:" gezeigt wurde –