2012-10-18 24 views
11

Có vẻ đơn giản, nhưng không thể tìm ra cách để làm việc này.Làm thế nào để sử dụng FactoryGirl với một mô hình mà có một băm trong phương pháp khởi tạo?

Trong model.rb:

def Model 
    attr_accessor :width, 
       :height 

    def initialize params 
    @width = params[:width] 
    @height = params[:height] 
    ... 

Trong nhà máy tập models.rb:

FactoryGirl.define do 
    factory :model do 
    height 5 
    width 7 
    end 
end 

Thiết lập các thuộc tính trong phương pháp nhà máy ném một lỗi wrong number of arguments (0 for 1)

Làm việc trong Ruby 1.9.3 mà không Đường ray, sử dụng Factory.build. FactoryGirl 4.1.

EDIT: Thông tin thêm:

Sử dụng RSpec: let(:model) { FactoryGirl.build :model }

+0

Điều này giống như định nghĩa FactoryGirl chuẩn. Làm cách nào bạn gọi 'Factory.build'? Bạn có thể đăng nội dung đầy đủ của định nghĩa nhà máy của bạn, bao gồm bất kỳ 'after_build' hoặc' after_create' hooks nào không? –

+0

OK, xong. Đã thêm thông tin. –

Trả lời

29

này nên làm việc với lớp học của bạn:

FactoryGirl.define do 

    factory :model do 
    skip_create 

    width 5 
    height 9 

    initialize_with { new(attributes) } 
    end 
end 

- skip_create bỏ qua hành động mặc định save! thường kêu gọi các đối tượng mới.

-Các phương pháp attributes tạo một băm bạn có thể chuyển đến new sử dụng initialize_with.

+0

Điều này vượt qua một băm rỗng. 'initialize_with {{height: 5, width: 6}}' chuyển vào hàm băm thích hợp, nhưng nhà máy trả về giá trị băm thay cho đối tượng mô hình. –

+0

Bạn nói đúng; không nên có một khối bỏ qua. Loại bỏ nó ngay bây giờ. –

+0

Nó hoạt động. Cảm ơn bạn! –

Các vấn đề liên quan