加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 19:35:30 所属栏目:百科 来源:网络整理
导读:我有一个包括一些工厂的宝石.宝石看起来像: .├── Gemfile├── Gemfile.lock├── README.md├── Rakefile├── db├── lib│ ├── models│ │ ├── users.rb├── pkg├── core.gemspec├── spec│ ├── factories│ │ └── user
我有一个包括一些工厂的宝石.宝石看起来像:
.
├── Gemfile
├── Gemfile.lock
├── README.md
├── Rakefile
├── db
├── lib
│   ├── models
│   │   ├── users.rb
├── pkg
├── core.gemspec
├── spec
│   ├── factories
│   │   └── users.rb
│   ├── fixtures
│   ├── helpers
│   ├── integration
│   ├── spec_helper.rb
│   ├── support│   │ 
│   └── unit
│       └── users_spec.rb
└── tasks

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

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

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

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

require 'rubygems'
require 'bundler/setup'
Bundler.require(:default,:development)

ENV['RACK_ENV'] ||= 'test'

require 'rack/test'

require File.expand_path('../../config/environment',__FILE__)

RSpec.configure do |config|
  config.mock_with :rspec
  config.expect_with :rspec
  config.raise_errors_for_deprecations!
  config.include FactoryGirl::Syntax::Methods
end

require 'capybara/rspec'
Capybara.configure do |config|
  config.app = Test::App.new
  config.server_port = 9293
end

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

require 'spec_helper'

describe App::UsersController do
  include Rack::Test::Methods

  def app
    App::API
  end

  describe "/users/me" do
    context "with invalid access token" do
      before(:each) do
        get "/api/v2/users/me"
        user = build(:user)
      end      

      it 'returns 401 error code' do
        expect(last_response.status).to eq(401)
        expect(user).to eq(nil)
      end
    end    
  end
end

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

我不断得到这个错误:

Failure/Error: user = build(:user)
 ArgumentError:
   Factory not registered: user

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

解决方法

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

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

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

GEM_ROOT = File.dirname(File.dirname(File.dirname(__FILE__)))

Dir[File.join(GEM_ROOT,'spec','factories','*.rb')].each { |file| require(file) }

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读