如何使用Factory_bot_rails


factory_bot 是一个固定可用直接定义语法 替换,支持多个构建strategies策略(保存实例,不保存实例,属性hashes, stubbed对象), 而且支持多个factories for the same class(user, admin_user, and so on), 包括factory inheritance.

factory_bot_rails 提供的是factory_bot的rails的集成。

配置
Gemfile
group :development, :test do
  get 'factory_bot_rails'
end

你可能想去配置测试套件包含factory_bot方法,配置:
RSpec:
如果用的是rails, 增加下面的配置 spec/support/factory_bot.rb , and be sure  require that in rails_helper.rb:
RSpec.configure do |config|
  config.include FactoryBot::Syntax::Methods
end

如果不是rails 
https://github.com/thoughtbot/factory_bot/blob/master/GETTING_STARTED.md#configure-your-test-suite

自动化的Factory定义加载
默认,factory_bot_rails 将自动加载factories定义在下面位置。相对Rails项目的root路径:
factories.rb
test/factories.rb
spec/factories.rb
factories/*.rb
test/factories/*.rb
spec/factories/*.rb

你可以在config/application.rb, config/environments 增加自动加载的配置信息
config.factory_bot.definition_file_paths = ["custom/factories"]

这将引起 factory_bot_rails 去自动加载factories 位于: custom/factories.rb  和 custom/factories/*.rb

也可以去使用这个设置通过一个gem去分享factories,
begin
  require 'factory_bot_rails'
rescue LoadError
end

class MyEngine < ::Rails::Engine
  config.factory_bot.definition_file_paths += [File.expand_path('../factories', __FILE__)] if defined?(FactoryBotRails)
end

你也可以禁止自动化的factory定义加载,通过定一个空数组
config.factory_bot.definition_file_paths = []

Generators 构造器

包括factory_bot_rails 在你的Gemfile开发组里面将引起rails去构造factories ,并替换fixtures. 如果你想禁用这个功能,你可以either  move factory_bot_rails out of development group of your Gemfile, 或者增加下面的配置
config.generators do |g|
   g.factory_bot false
end

如果fixture replaement 是启用的,你已经有了 test/factories.rb file 或者 spec/factories.rb, (rspec_rails), 生成factories 将被插入到存在的文件的顶部。否则工厂将被生成在 test/factories 目录(spec/factories 如果你用rspec_rails)  文件名和table匹配。
test/factories/user.rb

生成一个不同的文件目录的配置:
config.generators do |g|
   g.factory_bot dir: 'custom/dir/for/factories'
end

注释factory_bot_rails 将不会自动加载files 在你自定的路径里面,除非你也增加他们到 config.factory_bot.definition_file_paths.

这个后缀选项,允许你去自定义生成的文件的后缀:
config.generators do |g|
  g.factory_bot suffix: "factory"
end

这将生成 test/factories/users_factory.rb  而不是 test/factories/users.rb

对于更加个性化的配置,使用 filename_proc 选项:
config.generators do |g|
  g.factory_bot filename_proc: -> (table_name) {"prefix_#{table_name}_suffix"}
end
去覆盖  默认的 factory template, 定义你自己的template 在 lib/templates/factory_bot/model/factories.erb.  这个模板将进入任何可用的定义再FactoryBot::Generators::ModelGenerator.   Note that factory_bot_rails 将只用这个custom template 如果你是生成每个factory再一个独立的文件; 他将没有影响,如果你生成所有的factories 在 test/factories.rb 或者 spec/factories.rb

阅读量: 503
发布于:
修改于: