4

我在 Rails 4 项目中安装了 Fabrication 和 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 时遇到过同样的错误信息?

4

2 回答 2

8

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

title { Faker::Lorem.words(5).join(" ") }
于 2013-10-17T11:34:05.957 回答
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)
于 2015-05-12T22:10:46.370 回答