«Неопределенный метод` build '"при использовании Rspe c + FactoryBotRails - PullRequest
1 голос
/ 31 января 2020

Я пробую этот камень под названием FactoryBotRails . По какой-то причине, когда я пробую его на одном из моих модульных тестов, выдается следующая ошибка:

Ошибка / Ошибка: my_model = build (: my_model)
NoMethodError:
неопределенный метод `build 'для # \ <\ RSpe c :: ExampleGroups :: MyModel :: ValidationTests: 0x000055c553959958>

Я не знаю, что я делаю неправильно, если Я следовал нескольким учебникам в Интернете и делал те же шаги.


Добавлено в:

gemfile

gem 'factory_bot_rails', '~> 5.1.1'

app / spec / support / factory_bot.rb

RSpec.configure do |config|
  config.include FactoryBot::Syntax::Methods
end

spec / rails_helper.rb

Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }

spec / factory / my_models.rb

FactoryBot.define do
  factory :my_model do
    name { 'some name' }
    code { 'some code' }
  end
end

И использовал его как:

my_model = build(:my_model)

Что не так с моей конфигурацией?

Ответы [ 2 ]

2 голосов
/ 05 февраля 2020

Возможно, проблема не в , что вы звоните, а в , где вы звоните. my_model = build(:my_model) - это не тот синтаксис, который вы хотите использовать при написании спецификаций, и сообщение об ошибке выглядит, может быть, вы вызываете его извне спецификации c? Потому что, если вы вызываете его изнутри spe c, ошибка должна быть чем-то вроде ArgumentError: Factory not registered: my_model. Сам по себе spe c должен выглядеть следующим образом:

# spec/models/my_model_spec.rb
require 'rails_helper'

describe MyModel do
  let(:my_model) { build :my_model }

  it { expect(my_model).to be_valid }
end

Я бы также указал название модели в вашей фабричной декларации (т. Е. factory :my_model, class: 'MyModel' do). Если вы хотите поиграть со своими фабриками, вы можете запустить тестовую консоль:

# start rails console in 'test' environment
rails console test
my_model = FactoryBot.build :my_model

Обратите внимание, что вам нужно будет использовать FactoryBot.build вместо build в вашей тестовой консоли.

Если это не решит вашу проблему, пожалуйста, обновите ваше сообщение содержимым spe c, который вы пытаетесь запустить, как вы пытаетесь его запустить, и расширьте определение вашего файла spec/rails_helper.rb , Поскольку вы новичок в RSpe c, я также советую проверить http://www.betterspecs.org/ на лучшие практики.

0 голосов
/ 31 января 2020

Синтаксис создания factorybot, о котором я знаю, таков:

FactoryBot.create :my_model

Передать аргументы ha sh, если вам нужно что-то другое:

FactoryBot.create :my_model, name: "John Doe"

Для нескольких (например, 10 my_models):

FactoryBot.create_list :my_model, 10
...