@IvanN777

Проблема с конфигурацией gem 'factory_girl_rails' and 'rspec-rails' посмотрите плиз что не так?

Подключил два гема
gem 'factory_girl_rails'
gem 'rspec-rails'
По руководству
everydayrails.com/2012/03/19/testing-series-rspec-...

В spec/spec_helper.rb
Добавил
require 'factory_girl_rails'
#....
 config.include FactoryGirl::Syntax::Methods

Добавил новую директорию "spec/factories"
В ней решил проверить тестовую модель Pool с единственным атрибутом name
В файле "spec/factories/pools.rb" Я добавил
FactoryGirl.define do
  factory :pool do |f|
    f.name "Ivan"
  end
end

В файле "spec/models/pool_spec.rb"
require 'rails_helper'

RSpec.describe Pool, type: :model do
  pending "add some examples to (or delete) #{__FILE__}"
  it "has a valid factory" do
    FactoryGirl.create(:pool).should be_valid
  end
end


Когда я пытался разобраться я удалил директорию "spec/factories"
Ошибка не изменилась.
Подозреваю, что когда "spec/factories" существовала, почему то не происходила подгруздка.
Некто не тестирует этими вещами?
При запуске теста выдает ошибку:
1) Pool has a valid factory
Failure/Error: FactoryGirl.create(:pool).should be_valid
NoMethodError:
undefined method `name=' for #
  • Вопрос задан
  • 2526 просмотров
Пригласить эксперта
Ответы на вопрос 3
Jeiwan
@Jeiwan
Старое руководство. Вообще, для гемов в большинстве случаев руководства не нужны: есть репозиторий на github, где всё расписано. Вот, например, репозиторий factory_girl – https://github.com/thoughtbot/factory_girl, вот актуальный cheat sheet – https://github.com/brennovich/cheat-ruby-sheets/bl...

factory :pool do |f|
  f.name "Ivan"
end

Устаревший синтаксис, сейчас не надо передавать переменную в блок, и соответственно поля назначаются напрямую. Скорее всего, ошибка возникает именно из-за этого.

require 'factory_girl_rails'
Это теперь тоже не нужно.

После этого:
config.include FactoryGirl::Syntax::Methods
писать FactoryGirl здесь:
FactoryGirl.create(:pool)
не нужно. Можно просто `create(:pool)`
Ответ написан
Комментировать
viktorvsk
@viktorvsk
А у вас есть модель Pool с методом name= ?
В app/models/pool.rb
Ответ написан
@IvanN777 Автор вопроса
class CreatePools < ActiveRecord::Migration
def change
create_table :pools do |t|
t.string :name

t.timestamps null: false
end
end
end
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы