Faker gem的问题

时间:2013-10-17 11:25:05

标签: ruby-on-rails rspec faker

我在我的Rails 4项目中安装了Fabrication and Faker

我创建了一个制造对象:

Fabricator(:course) do
  title { Faker::Lorem.words(5) }
  description { Faker::Lorem.paragraph(2) } 
end

我在我的courses_controller_spec.rb测试中调用了Faker对象:

require 'spec_helper'

describe CoursesController do
  describe "GET #show" do
    it "set @course" do
      course = Fabricate(:course)
      get :show, id: course.id
      expect(assigns(:course)).to eq(course)
    end
    it "renders the show template"
  end
end

但出于某种原因,测试在第6行失败:

course = Fabricate(:course)

错误信息是:

Failure/Error: course = Fabricate(:course)
 TypeError:
   can't cast Array to string

不知道为什么会失败。有没有人遇到与Faker相同的错误消息?

2 个答案:

答案 0 :(得分:8)

words(5)的返回是一个数组,而不是一个字符串。你应该这样做:

title { Faker::Lorem.words(5).join(" ") }

答案 1 :(得分:1)

当时不确定这是否可用,但另一种解决方案是给它一个句子而不是一个单词:

来自回购

def sentence(word_count = 4, supplemental = false, random_words_to_add     = 6)
    words(word_count + rand(random_words_to_add.to_i).to_i, supplemental).join(' ').capitalize + '.'
end

所以你可以这样做:

Faker::Lorem.sentence(5, false, 0)