ruby-on-rails – 如何分享我在创业板上的工厂,并将其用于其他项目?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何分享我在创业板上的工厂,并将其用于其他项目?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个包括一些工厂的宝石.宝石看起来像:
  1. .
  2. ├── Gemfile
  3. ├── Gemfile.lock
  4. ├── README.md
  5. ├── Rakefile
  6. ├── db
  7. ├── lib
  8. ├── models
  9. ├── users.rb
  10. ├── pkg
  11. ├── core.gemspec
  12. ├── spec
  13. ├── factories
  14. └── users.rb
  15. ├── fixtures
  16. ├── helpers
  17. ├── integration
  18. ├── spec_helper.rb
  19. ├── support
  20. └── unit
  21. └── users_spec.rb
  22. └── tasks

现在我在另一个Ruby项目(Grape)中使用gem来添加像gem’core’,git:’https://url.git’这样的东西.

现在一切都正常,因为我可以使用Grape项目的用户模型.

不过,我想使用工厂(用户),所以我可以为Grape项目编写进一步的集成测试.

在Grape项目中,在spec_helper.rb中,它看起来像:

  1. require 'rubygems'
  2. require 'bundler/setup'
  3. Bundler.require(:default,:development)
  4.  
  5. ENV['RACK_ENV'] ||= 'test'
  6.  
  7. require 'rack/test'
  8.  
  9. require File.expand_path('../../config/environment',__FILE__)
  10.  
  11. RSpec.configure do |config|
  12. config.mock_with :rspec
  13. config.expect_with :rspec
  14. config.raise_errors_for_deprecations!
  15. config.include FactoryGirl::@R_301_156@::Methods
  16. end
  17.  
  18. require 'capybara/rspec'
  19. Capybara.configure do |config|
  20. config.app = Test::App.new
  21. config.server_port = 9293
  22. end

现在我的测试’users_spec.rb’看起来像:

  1. require 'spec_helper'
  2.  
  3. describe App::UsersController do
  4. include Rack::Test::Methods
  5.  
  6. def app
  7. App::API
  8. end
  9.  
  10. describe "/users/me" do
  11. context "with invalid access token" do
  12. before(:each) do
  13. get "/api/v2/users/me"
  14. user = build(:user)
  15. end
  16.  
  17. it 'returns 401 error code' do
  18. expect(last_response.status).to eq(401)
  19. expect(user).to eq(nil)
  20. end
  21. end
  22. end
  23. end

现在,当我尝试使用rspec spec / api / users_spec.rb运行测试时,我得到:

我不断得到这个错误

  1. Failure/Error: user = build(:user)
  2. ArgumentError:
  3. Factory not registered: user

任何帮助将不胜感激,因为我一直在努力为此.

解决方法

问题在于,您可能不会将spec文件夹(以及工厂)暴露在加载路径中.一般来说,这是正确的事情.检查你* .gemspec,你可能有这样的东西:
  1. s.require_paths = ["lib"]

这意味着只有使用您的宝石的其他项目才能要求lib目录下的文件.见http://guides.rubygems.org/specification-reference/#require_paths=

所以为了解决你的问题,你需要把一个文件放在lib文件夹里,这个文件夹被称为你所在的工厂,需要这些文件.所以在你的情况下,创建一个文件lib /<你的gem名称> /factories.rb并添加

  1. GEM_ROOT = File.dirname(File.dirname(File.dirname(__FILE__)))
  2.  
  3. Dir[File.join(GEM_ROOT,'spec','factories','*.rb')].each { |file| require(file) }

在另一个项目中,加载工厂:

需要’<你的宝石名称> /工厂’

对我来说很好.我唯一没有想到的是如何命名你的工厂.不知道工厂女孩是否允许这个.

猜你在找的Ruby相关文章