2017-04-14 80 views
0

我有一個Company模型has_manyUsersbelongs_toCompany。我還在Company模型中調用了一個我希望避免的外部服務。我正在嘗試使用linter設置FactoryGirl,但它一直在拋出錯誤。工廠女孩錯誤嵌套屬性和導軌5

這裏的控制器的外觀:

class CompanyController < ApplicationController 
    ... 

    def new 
    @company = Company.new 
    @user = @company.users.build 
    end 

    def create 
    @company = Company.new(company_params) 
    @user = @company.users.first 
    ... 
    end 

    ... 
end 

控制器正常工作在本地主機上,並在生產,所以用代碼功能一定沒問題 - 那就是我有一個測試的問題。

我想創建沿着這些路線工廠:

FactoryGirl.define do 
    factory :company do 
    name Faker::Company.name 
    association :user, strategy: :build 
    before(:create) do |company| 
     company.class.skip_callback(:create, :before, :my_callback) 
    end 
    end 

    factory :user do 
    email Faker::Internet.email 
    password "password" 
    password_confirmation "password 
    end 
end 

的問題是,我得到一個錯誤,指出以來belongs_to用戶一個company must exist需要和公司的一個錯誤說undefined method user=,因爲我試圖建立多個用戶。我也嘗試了許多其他變體,最終不會跳過回調(例如在用戶工廠中創建公司)。

我希望有人知道如何建立一個兼容這種類型的控制器設置的工廠,或者如果有不同的方式,我應該建立沒有嵌套屬性的控制器?

在此先感謝您的幫助!

回答

0

我剛剛添加了一條評論,但我沒有足夠的聲譽。

你沒有顯示你的模型和你的分表,但我想你的users表有company_id字段和Company模型有行has_many :users

這是我會怎麼用工廠女孩在這樣的情況:

用戶廠:

factory :user do 
    email Faker::Internet.email 
    password "password" 
    password_confirmation "password" 
    company 
    end 

公司工廠:

factory :company do 
    name Faker::Company.name 
end 

然後在您要創建多個用戶測試,對?

company = create(:company) 
number_of_users = 5 
create_list(:user, number_of_users, company: company) 

這樣,您創建的所有用戶都將關聯到同一家公司。