#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
. Хорошее объяснение здесь .