我在我的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相同的错误消息?
答案 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)