我想测试我的用户#show控制器。如何使用FactoryGirl创建要传递到控制器的测试数据?
在“spec / controllers / users_controller_spec.rb”中:
describe UsersController do
describe "GET #show" do
it "assigns the requested user to @user" do
user = Factory(:user) # How do I do this using FactoryGirl?
get :show, id: user
assigns(:user).should eq(user)
end
end
end
在“spec / factories / users.rb”中
require 'faker'
FactoryGirl.define do
factory :user do
email { Faker::Internet.email }
end
# Replace email with nil. Apparently all other attributes defer to the
# original :user factory.
factory :invalid_user do
email nil
end
end
答案 0 :(得分:2)
总结:
使用latest docs中显示的create(:user)
或build(:user)
代替Factory(:user)
。
build(:user)
不会将对象保存到数据库,因此您可能必须存根控制器的查询。但它更快。
要传递非持久用户的ID,您必须get :show, id: user.id
代替get :show, id: user