使用FactoryGirl进行控制器测试

时间:2013-12-28 04:15:54

标签: ruby-on-rails testing ruby-on-rails-4 factory-bot

我想测试我的用户#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

1 个答案:

答案 0 :(得分:2)

总结:

使用latest docs中显示的create(:user)build(:user)代替Factory(:user)

build(:user)不会将对象保存到数据库,因此您可能必须存根控制器的查询。但它更快。

要传递非持久用户的ID,您必须get :show, id: user.id代替get :show, id: user