Từ hiểu biết của tôi, giá trị trả về từ phương thức 'to_create' của nhà máy bị bỏ qua. Điều này có nghĩa là đối tượng được trả về từ phần 'build' hoặc 'initialize_with' của nhà máy là đối tượng cuối cùng được trả về khi gọi 'create' trong một thử nghiệm.FactoryGirl to_create return value
Trong trường hợp của tôi, tôi đang sử dụng biến thể của Mẫu Kho lưu trữ. Tôi ghi đè phần 'to_create' của nhà máy để bao gồm cuộc gọi đến phương thức lưu 'lưu'. Phương thức này không sửa đổi đối tượng đã cho, nhưng trả về một đối tượng biểu diễn dạng tồn tại của bản gốc.
Tuy nhiên, thể hiện được trả lại từ khối 'xây dựng' được trả lại từ nhà máy chứ không phải trường hợp được tạo trong khối 'to_create'. Trong mã của tôi, điều này có nghĩa là biểu mẫu "không được hỗ trợ" của đối tượng được trả về, không phải đối tượng có thuộc tính được cập nhật (ví dụ: 'id') từ hành động lưu.
Có cách nào để buộc giá trị trả lại của 'tạo' là kết quả của khối 'to_create' hoặc một số giá trị được tạo trong khối đó không?
class Foo
attr_accessor :id, :name
...
end
class FooRepository
def self.create(name)
Foo.new(name) # this object is not yet persisted and has no .id
end
def self.save(foo)
# this method must not guarantee that the original Foo instance
# will always be returned
...
updated_foo # this is a duplicate of the original object
end
...
end
FactoryGirl.define do
factory :foo, class: FooRepository do
# create an example Foo
initialize_with { FooRepository.create(name: "Example") }
# save the Foo to the datastore, returning what may be a duplicate
to_create {|instance| FooRepository.save(instance)}
end
end
describe FooRepository do
it "saves the given Foo to the datastore" do
foo = create(:foo)
foo.id #=> nil
...
end
end
Tốt! Nó đã giúp với một số vấn đề khác nhau, nhưng câu trả lời rất tốt đẹp tuy nhiên! :) – Aleks