Первая проблема заключается в том, что FactoryGirl показывает сообщение об ошибке, но не говорит, где происходит, файл и строка:
У меня есть byebug
в очень простом spec
файле:
RSpec.describe Site::HomeHelper, type: :helper do
describe 'html meta description for products page' do
context 'without categories' do
it 'should return the family name and preference.meta_desc' do
byebug
end
end
end
end
А тут работает бебуг, потом в консоли пытаюсь:
(byebug) FactoryGirl.create(:user_with_one_company)
и сообщение об ошибке
*** NoMethodError Exception: undefined method `zero?' for nil:NilClass
Но я не знаю, где
Затем, пытаясь решить эту проблему, я поставил byebug
во всех местах, которые, как мне кажется, могут вызвать эту ошибку, но я понял, что с FactoryGirl.create(:model)
byebug не срабатывает (я почти уверен в прошлое могло использовать это)
Так что, например, в просто работающем коде вот так
(byebug) FactoryGirl.create(:user).activation_code
с моделью пользователя:
class User < ApplicationRecord
before_create :set_activation_code
private
def set_activation_code
byebug
self.activation_code = 'IT IS EXECUTED'
end
Я получаю
(byebug) FactoryGirl.create(:user).activation_code
"IS EXECUTED"
и byebug не выполняется , программа не останавливается
Я проверил Gemfile, чтобы проверить, не было ли у меня некоторых гемов, не входящих в группы разработки или тестирования, и я думаю, что все в порядке:
group :development, :test do
gem 'byebug', platforms: %i[mri mingw x64_mingw]
gem 'database_cleaner'
gem 'rspec-rails', '~> 3.6.0'
gem 'spring'
gem 'spring-commands-rspec'
gem 'spring-watcher-listen', '~> 2.0.0'
gem 'factory_girl_rails' #, '4.8.0'
end
group :test do
gem 'capybara'
gem 'selenium-webdriver'
gem 'launchy'
gem 'rails-controller-testing' # => 'assert_template'
gem 'shoulda-matchers', '~> 3.1'
end
Я думаю, что упускаю что-то очевидное. Спасибо
Отредактировано -> Заводской код:
FactoryGirl.define do
factory :user, class: Constructor::User do
password 'Elsevier'
password_confirmation 'Elsevier'
sequence(:name) { |n| "Pep#{n}" }
sequence(:email) { |n| "pep#{n}@gmail.com" }
factory :user_without_password_confirmation do
password_confirmation 'ElsevXXX'
end
...
end
end