第一个问题是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有效,然后在控制台中尝试:
(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,看是否有一些不在开发或测试组中的gem,我认为还可以:
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
答案 0 :(得分:0)
我发现自己的解决方案是从FactoryGirl.create...
执行rails console
。在这里,我可以看到错误跟踪,还可以毫无问题地访问byebug。
要做到这一点,只需记住两件事:
factory_girl_rails
宝石必须位于Gemfile的开发组中
group :development, :test do'
gem 'byebug', platforms: %i[mri mingw x64_mingw]
...
gem 'factory_girl_rails
在rails console
中执行FactoryGril.create ...时,表不会自动重置,因为运行测试时会发生这种情况