Использование FactoryGirl без Rails, ActiveRecord или любой базы данных с RSpec

#ruby #rspec #factory-bot

#ruby #rspec #factory-бот

Вопрос:

Мне было интересно, знает ли кто-нибудь, возможно ли использовать FactoryGirl без каких-либо из вышеупомянутых предварительных условий.

Я хотел бы использовать его для генерации тестовых данных «на лету» при проведении тестов автоматизации пользовательского интерфейса как для мобильных, так и для веб-приложений и даже, возможно, API.

Я знаю, что мог бы создать несколько пользовательских вспомогательных классов / методов и использовать геттеры и сеттеры и т. Д., Но я подумал, что было бы неплохо использовать этот удивительный маленький камень.

Я довольно много искал, а также пытался настроить базовый проект RSpec (я также пробовал Cucumber), но безрезультатно. По-прежнему кажется, что мне нужно, чтобы классы создавались с соответствующим логином, чтобы использовать его.

 FactoryGirl.define do
  factory :user  do
    firstname { Faker::Name.first_name }
    lastname { Faker::Name.last_name }
    age { 1   rand(100) }
  end
end
  

Затем, если я попытаюсь вызвать его в файле RSpec…

 describe...
  it...
    user = build_stubbed(:user)
  end
end
  

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

  Failure/Error: user = build_stubbed(:user)
 NameError:
   uninitialized constant User
  

это говорит о том, что мне нужен класс с именем User со всей логикой.

Ответ №1:

Ваше предположение верно — вам все равно придется написать User класс самостоятельно. factory_girl отлично работает с неактивными классами, но он не пишет их для вас.

По умолчанию factory_girl создает экземпляры путем вызова new без параметров, поэтому ваш класс не должен или не def initialize initialize должен принимать никаких параметров, точно так же, как модель ActiveRecord . Поэтому проще всего было бы написать User так:

 class User
  attr_accessor :firstname, :lastname, :age
end
  

Если вы решите, что вам нужен initialize параметр, требующий параметров, вы можете использовать factory_girl, initialize_with чтобы указать ему, как создать экземпляр вашего класса.

Комментарии:

1. Рассмотрите также возможность использования struct вот так: User = Struct.new :firstname, :lastname, :age . Хорошее объяснение здесь .