我有一组active_model模型,我已将其提取到共享gem中。我希望gem还包含他们的工厂,用于在任何使用gem的项目中定义的rspec测试,以避免在每个项目中定义相同的工厂。这可能吗?
答案 0 :(得分:2)
是的可能。您可以将工厂放在宝石中。让我们说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包含您的宝石代码,规格包含您的规格。 awesome_gem.rb将定义您的gem包括诸如awesome_gem / version.rb和更多包含。但是建议不要包含工厂目录,因为你的gem的用户不能使用factory_girl。
一旦宝石被打包,他们可以在测试中使用require awesome_gem / factories / factory1.rb。请注意,您需要在规范帮助器中指定工厂路径以包含共享工厂。请注意,此解决方案未经过测试,需要包含的路径可能不同。您也可以将工厂目录放在lib目录之外,只要它包含在.gemspec中。