【发布时间】:2014-07-01 13:39:40
【问题描述】:
我有一组已提取到共享 gem 中的 active_model 模型。我希望 gem 还包含它们的工厂,以用于在任何使用 gem 的项目中定义的 rspec 测试,以避免在每个项目中定义相同的工厂。这可能吗?
【问题讨论】:
-
您是如何解决这个问题的?我也面临同样的问题。
标签: ruby gem factory-bot
我有一组已提取到共享 gem 中的 active_model 模型。我希望 gem 还包含它们的工厂,以用于在任何使用 gem 的项目中定义的 rspec 测试,以避免在每个项目中定义相同的工厂。这可能吗?
【问题讨论】:
标签: ruby gem factory-bot
是的,有可能。您可以将工厂放置在您的宝石中。让我们说 lib/gem/factories/。然后你的其他宝石可以包括工厂。
例如,当您创建 gem 'awesome_gem' 时,您可以具有以下结构:
|-- lib
| |-- awesome_gem
| | |-- module1
| | `-- version.rb
| |-- factories
| | |-- factory1.rb
| | `-- factory2.rb
| `-- awesome_gem.rb
|
`-- spec
|-- awesome_gem
`-- spec_helper.rb
其中 lib 包含您的 gem 代码,而 specs 包含您的规范。 awesome_gem.rb 将定义您的 gem 包含,例如 awesome_gem/version.rb 和更多包含。但是建议不要包含 factory 目录,因为您的 gem 的用户不能使用 factory_girl。
打包 gem 后,他们可以在测试中使用 require awesome_gem/factories/factory1.rb。请注意,您需要在规范助手中指定您的工厂路径以包含您的共享工厂。请注意,此解决方案未经测试,需要包含的路径可能不同。您也可以将 factory 目录放在 lib 目录之外,只要它包含在您的 .gemspec 中即可。
【讨论】: