Size: a a a

2018 July 28

VM

Vasiliy M in Random Ruby Chat
Я хз как у тебя там логика устроена, но попробуй let!
источник

NF

N Freeman in Random Ruby Chat
он не во всех спеках нужен, дергается непосредственно вначале блока it
источник

NF

N Freeman in Random Ruby Chat
  config.before(:suite) do
   DatabaseCleaner.clean_with(:truncation)
 end

 config.before(:each) do
   DatabaseCleaner.strategy = :transaction
 end

 config.before(:each, js: true) do
   DatabaseCleaner.strategy = :truncation
 end

 config.before(:each) do
   DatabaseCleaner.start
 end

 config.after(:each) do
   DatabaseCleaner.clean
 end
источник

VM

Vasiliy M in Random Ruby Chat
Или вызов сделай old_item в дебагере перед тем как юзать
источник

NF

N Freeman in Random Ruby Chat
при таких настройках перед каждым it база обнуляется?
источник

VM

Vasiliy M in Random Ruby Chat
Датабейс клинер тут не причем по мойму
источник

И

Иван in Random Ruby Chat
Vasiliy M
Или вызов сделай old_item в дебагере перед тем как юзать
да 2 экспект и так его дергает, по идее должен создасться
источник

И

Иван in Random Ruby Chat
N Freeman
Всем кофе в этом чате!
Помогите разобраться плз.
Есть 3 модели: search, item, price и сервис, который создает или обновляет items и создает prices. За пределами тестов все норм и работает как надо.
Но простая спека не хочет работать, причем как-то странно. При запуске rspec ./mysterious_spec.rb тест проходит, а если все спеки запускаю, то не проходит
Кто-то с подобным сталкивался? Куда копать?

Текст спеки:
it 'update old items and create prices' do

  expect(items_data).to be

  expect(old_item).to be_valid

  expect do

    described_class.call(search_id: search.id,

                         data: items_data)

  end.to change { Item.first.updated_at }

    .and change { Price.count }.by(1)

end


первые два expect проходят, т.е. old_item созданный factory_bot виден,
а когда я через дебаггер оказываюсь внутри described_class, то Item.count = 0
и сервис не увидев старый item, создает новый, а спека выдает
 expected `Item.first.updated_at` to have changed, but is still 2018-07-28 11:26:56.262143000 +0000


wtf?
если ты говоришь что отдельно этот спек проходит а вместе с остальными спеками падает то восползуйся bisect
источник

И

Иван in Random Ruby Chat
он тебе найдет минимальный набор тестов при которых происходит падение
источник

NF

N Freeman in Random Ruby Chat
Нашел где проблема, добавил к спеку
expect(old_item.product_id).to eq(items_data.keys.first)
Получил
Failure/Error: expect(old_item.product_id).to eq(items_data.keys.first)

 expected: "product_1"

      got: "product_2"

код фабрики:
factory :item do

  sequence(:title) { |n| "title_#{n}" }

  sequence(:product_id) { |n| "product_#{n}" }

  url 'url'

  search

end

Что за магия? Почему factory_bot выдает product_2?
И как после того, как был создан old_item, может быть такое, что оказываясь внутри сервиса, Item.count = 0
источник

NF

N Freeman in Random Ruby Chat
Иван
если ты говоришь что отдельно этот спек проходит а вместе с остальными спеками падает то восползуйся bisect
thx
источник

И

Иван in Random Ruby Chat
Если тебе важно соответствие product_id то я бы не стал доверять это sequence
источник

NF

N Freeman in Random Ruby Chat
явсепонял, как часто и бывает, идиотская ошибка.
фабрика создает объект с id=2, видимо надо получше разобраться с db cleaner
А Item.count = 0 внутри сервиса получилось из-за того, что у меня в спеке 2 раза дергается сервис, и в первом случае действительно Item.count должно быть равно нулю. Там я потерянный old_item  и искал
Почувствуй себя дебилом, называется :D
источник
2018 July 29

NM

Nikita M in Random Ruby Chat
источник

NM

Nikita M in Random Ruby Chat
Ловите балтийский берег
источник

EB

Eugene Burmakin in Random Ruby Chat
Народ
источник

EB

Eugene Burmakin in Random Ruby Chat
@gambala @nikmelnikov @viis_w @tralalatralala в сидрерии на моховой около 22?
источник

EB

Eugene Burmakin in Random Ruby Chat
Кто хочет ещё приходите тоже, обзнакомимся
источник

D

Dimon in Random Ruby Chat
Норм, я подтяну ногу
источник

EB

Eugene Burmakin in Random Ruby Chat
Я могу немного задержаться, дождитесь уж)
источник