代码之家  ›  专栏  ›  技术社区  ›  Mr. Tao

RSpec与FactoryGirl无轨在哪里寻找模型?

  •  0
  • Mr. Tao  · 技术社区  · 8 年前

    我正在编写一个ActiveRecordRuby应用程序,不使用Rails。我想用FactoryGirl测试模型,但我正在努力配置。考虑到未初始化的常量错误,我猜它无法在中找到模型 lib/models 文件夹

    我想知道rspec/FactoryGirl期望的文件夹结构是什么,或者我如何告知它模型位置。

    rspec-fd规范/模型/用户规范.rb
    …/spec/models/user_spec.rb:3:in `<top (required)>': uninitialized constant User (NameError)
        from /usr/local/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.4/lib/rspec/core/configuration.rb:1435:in `load'
        from /usr/local/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.4/lib/rspec/core/configuration.rb:1435:in `block in load_spec_files'
        from /usr/local/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.4/lib/rspec/core/configuration.rb:1433:in `each'
        from /usr/local/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.4/lib/rspec/core/configuration.rb:1433:in `load_spec_files'
        from /usr/local/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.4/lib/rspec/core/runner.rb:100:in `setup'
        from /usr/local/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.4/lib/rspec/core/runner.rb:86:in `run'
        from /usr/local/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.4/lib/rspec/core/runner.rb:71:in `run'
        from /usr/local/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.4/lib/rspec/core/runner.rb:45:in `invoke'
        from /usr/local/lib/ruby/gems/2.3.0/gems/rspec-core-3.5.4/exe/rspec:4:in `<top (required)>'
        from ./bin/rspec:17:in `load'
        from ./bin/rspec:17:in `<main>'
    

    spec/models/user.rb
    describe User, type: :model do
      it 'can be instantiated' do
        user = User.new
        expect(user).to be_a User
      end
    end
    
    lib/models/user.rb
    class User < ActiveRecord::Base
    end
    

    我已经使用创建了RSpec配置 rspec --init :

    .rspec
    --color
    --require spec_helper
    
    spec/spec_helper.rb
    require 'factory_girl'
    require_relative 'support/factory_girl'
    
    RSpec.configure do |config|
      config.expect_with :rspec do |expectations|
        expectations.include_chain_clauses_in_custom_matcher_descriptions = true
      end
    
      config.mock_with :rspec do |mocks|
        mocks.verify_partial_doubles = true
      end
    
      config.shared_context_metadata_behavior = :apply_to_host_groups
    
    end
    
    规格/支持/工厂_girl.rb
    RSpec.configure do |config|
      config.include FactoryGirl::Syntax::Methods
    
      config.before(:suite) do
        FactoryGirl.find_definitions
      end
    end
    
    spec/factories.rb
    FactoryGirl.define do
      factory :user do
        username "johnny"
      end
    end
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Midwire Sergiy Seletskyy    8 年前

    您缺少的部分是Rails加载了FactoryGirl之前的所有模型 spec_helper.rb 运行RSpec测试套件时。

    尝试将所有模型加载到

    root = File.expand_path('../', File.dirname(__FILE__))
    Dir[File.join(root,'lib/**/*.rb')].each { |f| require f }
    
    require 'factory_girl'
    require_relative 'support/factory_girl'
    
    ...
    
    推荐文章