尝试在Rails中设置rspec测试时获取未初始化的常量Faker :: String

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试在Rails中设置rspec测试时获取未初始化的常量Faker :: String相关的知识,希望对你有一定的参考价值。

我有一个UrlContent模型,我正在尝试为Json的索引页面的API调用编写一个rspec测试。但是,每当我运行rspec时,它都会给我这个错误:

 Failure/Error: content { Faker::String }

 NameError:
   uninitialized constant Faker::String

当属性的faker看似已正确配置时,为什么会出现该错误?

这让我感到困惑,因为在我的spec / factories / url_content.rb文件中我有:

要求'faker'

FactoryBot.define do
  factory :url_content do
    content { Faker::String }
  end
end

我设置的具体rspec测试是:

require 'rails_helper'
require 'faker'

RSpec.describe "UrlContents API", type: :request do

    before { FactoryBot.create_list(:url_content, 3) }

describe 'GET /url_contents' do
    before { get '/url_contents'}

    it 'returns a status code of 200' do 
        expect(response).to have_http_status(200)
    end

    it 'returns an array of content in JSON' do 
        json = JSON.parse(response.body, symbolize_names: true)

    end 

end

end 
答案

Faker::String 9天前在December 24被添加到faker gem中,最新版本的faker(1.8.7)发布在December 22上。你必须使用github的版本才能使用Faker::String。在Gemfile中指定git存储库,如下所示:

gem 'faker', git: 'https://github.com/stympy/faker'
另一答案

Faker::String was added to the ruby gem 9 days ago

在撰写本文时,The most recent gem version1.8.7;这是在12月22日(即加入Faker::String之前)发布的。

如果你想使用gem的这个功能,你需要告诉bundler使用repo的master分支:

gem 'faker', git: 'https://github.com/stympy/faker'

......或者,从源头本地构建gem。

git clone git@github.com:stympy/faker.git
rake install

你选择在一个积极维护的宝石上使用未发布的功能,这是非常不吉利的。

但是,一般情况下,您可以检查changelog以查看您的宝石版本是否足够最新;或者,如果没有,那就是直接的git历史。

您还可以在项目中运行bundle open faker,并导航源代码以查看您的功能是否存在于已安装的gem中。

以上是关于尝试在Rails中设置rspec测试时获取未初始化的常量Faker :: String的主要内容,如果未能解决你的问题,请参考以下文章

尝试运行 rspec 时,我得到“未初始化的常量 ActiveModel”

Rails - RSpec NoMethodError:未定义的方法

.env 未使用 rspec 在 Rails 的测试环境中加载

Rails Fixtures 未使用 rspec 加载

未初始化的常数 Rspec

Rails 5,Rspec:架构中未找到环境数据