如何在Rails中调试FactoryGirl.create回调错误?

时间:2019-01-09 18:02:30

标签: ruby-on-rails ruby-on-rails-5 factory-bot

第一个问题是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

1 个答案:

答案 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 ...时,表不会自动重置,因为运行测试时会发生这种情况