Raj*_*hra 6 rspec ruby-on-rails factory-bot
我有以下三个模型:Product,Warehouse和Inventory
# app/models/product.rb
class Product < ApplicationRecord
has_many :inventories
has_many :warehouses, through: :inventories
end
# app/models/warehouse.rb
class Warehouse < ApplicationRecord
has_many :inventories
has_many :products, through: :inventories
end
# app/models/inventory.rb
class Inventory < ApplicationRecord
belongs_to :product
belongs_to :warehouse
end
Run Code Online (Sandbox Code Playgroud)
我有这个库存工厂:
FactoryBot.define do
factory :inventory do
product { nil }
warehouse { nil }
item_count { 1 }
low_item_threshold { 1 }
end
end
Run Code Online (Sandbox Code Playgroud)
我如何将这个工厂用于库存,或者我的其他工厂需要进行哪些更改,以便我可以拥有这样的规范?
RSpec.describe Inventory, type: :model do
it "has a valid factory" do
expect(FactoryBot.build(:inventory)).to be_valid
end
end
Run Code Online (Sandbox Code Playgroud)
你需要的是改变:inventory工厂定义,像这样
FactoryBot.define do
factory :inventory do
product
warehouse
item_count { 1 }
low_item_threshold { 1 }
end
end
Run Code Online (Sandbox Code Playgroud)
这将“告诉”工厂机器人实例化关联的对象(https://github.com/thoughtbot/factory_bot/blob/master/GETTING_STARTED.md#associations)
但是要使其工作,您需要定义warehouse和product工厂。
如果工厂作为符号,则可以使用 或create方法传递名称:build
it "has a valid factory" do
expect(create(:inventory)).to be_valid
end
# OR
it "has a valid factory" do
expect(build(:inventory)).to be_valid
end
Run Code Online (Sandbox Code Playgroud)
create将保存模型,同时build简单地实例化它。如果您在装载工厂时遇到困难,请确保它们位于正确的位置。
| 归档时间: |
|
| 查看次数: |
313 次 |
| 最近记录: |