2009-07-21 34 views
16

Tôi đang cố gắng thiết lập Factory Girl with Test :: Unit và Shoulda trong Ruby on Rails. Tôi đã cài đặt gem, tạo tệp nhà máy của tôi trong thư mục test/factories và tạo tệp spec của tôi trong thư mục test/models. Các lỗi hiện tại tôi nhận được là 'ArgumentError: Không có nhà máy như vậy: kiểm tra', dẫn tôi tin rằng file test_factory.rb không được nạp? Có ý tưởng nào về những gì tôi nên thay đổi không?Thiết lập Factory Girl with Test :: Unit và Shoulda

Đây là các tệp của tôi.

#test/factories/test_factory.rb 
Factory.define :test do |t| 
    t.name 'test_spotlight' 
    t.label 'test spotlight label' 
end 

#test/modes/test_spec.rb 
require 'test_helper' 
require 'factory_girl' 
class TestTest < Test::Unit::TestCase 
    def setup 
    @test = Factory.build(:test) 
    end 

    context "A test" do 
    should "save with the minimum requirements" do 
     assert @test.save 
    end 
    end 
end 

Trả lời

40

tôi đã chạy vào vấn đề này trên một trong các dự án của tôi. Tôi không chắc chắn chính xác điều gì khiến mã khởi tạo bị bỏ qua nhưng bạn có thể buộc tải định nghĩa nhà máy như sau:

require 'factory_girl' 
Factory.find_definitions 

Hy vọng điều này sẽ hữu ích.

+1

Điều này làm việc cho tôi bằng cách đặt nó trong tệp 'test_helper.rb' của tôi. Tôi chạy vào trong khi sử dụng factory_girl 1.3.3, đường ray 2.3.11, ruby ​​1.8.7, và bundler 1.0.10 – Sukima

+0

Điều này thậm chí làm việc cho Rails 3.0.5 và Ruby 1.9.2p180 – Nikhil

+0

Làm việc cho tôi đường ray 3.0.9 trong khi làm railstutorial. Được đặt trong tệp user_helper của tôi. – LondonGuy

0

Bạn đã cố gắng di chuyển

require 'factory_girl' 

để thử nghiệm của bạn/test_helper.rb?

Cơ chế tự động tải nhà máy có thể phụ thuộc vào nơi yêu cầu được gọi. Nó có thể được cố gắng tìm nhà máy * thử nghiệm/mô hình/nhà máy/** * thay vì thử nghiệm/nhà máy/**

0

Thay vì đặt tên tập tin test_factory.rb nhà máy của bạn, hãy thử đặt tên nó factory.rb

+0

các tài liệu nói rằng bất kỳ tệp .rb nào trong thư mục kiểm tra/nhà máy sẽ được tải – brad

2

Tôi cũng gặp vấn đề tương tự. Cuối cùng tôi đã thực hiện làm bằng cách đặt tất cả các nhà máy của tôi trong "/test/factories.rb" và viết những dòng sau đây trong "/test/test_helper.rb" của tôi file:

require 'factory_girl' 
require File.dirname(__FILE__) + "/factories" 

bạn có thể làm điều tương tự cho nhiều tệp bằng cách yêu cầu chúng trong test_helper. Tôi chưa tìm ra lý do tại sao tự động bao gồm được đề cập trong readme "factory_girl" không xảy ra.

1

Nếu tôi chỉ yêu cầu 'factory_girl' trong test_helper.rb, tôi sẽ nhận được cùng một hành vi mà bạn đã đề cập, nhưng nếu tôi yêu cầu nó trong config/test/environment.rb của tôi (lưu ý tôi sử dụng environmentalist) Định nghĩa nhà máy mà không có bất kỳ vấn đề.

Tôi đã thử điều này sau khi đọc cô gái nhà máy rdoc nơi nó nói để đặt config.gem trong môi trường của bạn.

3

Hãy thử đặt này trong test_helper.rb:

require 'factory_girl' 
Dir.glob(File.dirname(__FILE__) + "/factories/*").each do |factory| 
    require factory 
end 
2

Tôi cũng quản lý để thoát khỏi vấn đề này bằng cách đặt dòng này vào environment.rb của tôi:

config.gem "factory_girl", :source => "http://gemcutter.org"

Make cũng chắc chắn bạn có viên ngọc mới nhất:

Tên đã thay đổi từ "thinkbot-factory_girl" thành "factory_girl", nguồn đã thay đổi từ "http://gems.github.com" thành "http://gemcutter.org".

0

Thú vị.Tôi đã có một vấn đề tương tự cố gắng để có được dưa chuột để làm việc với factory_girl. Ban đầu tôi đã định cấu hình factory_girl để tìm kiếm ('config.gem') nhưng không được tải trong môi trường dưa chuột và được yêu cầu đầy đủ trong 'features/support/env.rb', giống như dưa chuột dành cho webrat, v.v. làm việc khi tôi nói rõ ràng factory_girl để tìm định nghĩa của nó như Kenny đã đề xuất ở trên.

Khi tôi xóa tuyên bố yêu cầu khỏi env.rb và factory_girl được yêu cầu đầy đủ trong môi trường dưa chuột, hiệu ứng đã biến mất và factory_girl đã làm việc ra khỏi hộp.

Vì vậy, nó thực sự có vẻ là một câu hỏi khi nào (hoặc trong bối cảnh nào) factory_girl được tải.

2

Trong trường hợp bạn gặp vấn đề này với ruby ​​1.9.2, yêu cầu hy vọng đường dẫn mở rộng.

File.expand_path("test/factories.rb") 

patch giải quyết được sự cố của tôi. Tôi vừa gửi yêu cầu kéo. Sau đó bạn có thể thêm video này vào test_helper.rb của bạn:

require 'factory_girl' 
FactoryGirl.find_definitions 
1

Tôi cũng chạy vào vấn đề - sau khi cập nhật FactoryGirl để 1.3.2 - mà các nhà máy từ thử nghiệm/nhà máy không được nạp tự động nữa.

tôi có thể thoát khỏi vấn đề bằng cách thêm mã từ dg vào test_helper.rb:

Dir.glob(File.dirname(__FILE__) + "/factories/*.rb").each do |factory| 
require factory 
end 

Khi chạy thử nghiệm duy nhất trong Textmate, mọi thứ đều hoạt động tốt, nhưng chạy ví dụ tất cả các bài kiểm tra đơn vị từ dòng lệnh bằng cách sử dụng kiểm tra rake: các đơn vị không thành công với một DuplicateDefinitionError (tôi đọc rằng nó có thể có liên quan đến ruby ​​1.8.x). Vì vậy, tôi hơi thay đổi mã:

if (!Factory.factories || Factory.factories.empty?) 
    Dir.glob(File.dirname(__FILE__) + "/factories/*.rb").each do |factory| 
    require factory 
    end 
end 
+0

Tôi gặp vấn đề tương tự. Cảm ơn bạn! – deb

0

Kể từ khi những người khác nhau đang sử dụng các phiên bản khác nhau của Rails (2.x và 3 .x là phổ biến nhất hiện nay), điều quan trọng là bao gồm các phần thích hợp khác của môi trường của bạn (quan trọng nhất là phiên bản của Rails bạn đang ở trên). Từ trang web factory_girl, phiên bản 1.3.0 tài liệu (http://rubydoc.info/gems/factory_girl/1.3.0/frames):

If you want to use factory_girl with Rails 3, use the factory_girl_rails gem, not this one.

If you want to use factory_girl with Rails versions prior to Rails 3, use version 1.2.4.

Nếu bạn đang gặp rắc rối với việc bốc hàng, Tôi khuyên bạn nên đảm bảo rằng bạn đang sử dụng đúng phiên bản. Các phiên bản của factory_girl lớn hơn 1.2.4, tôi giả sử, được đưa vào như là phụ thuộc cho gem 'factory_girl_rails' (Rails 3.0+).

0

Tôi đã thêm require 'factory_girl' require File.dirname(FILE) + "/factories" vào spec_helper.rb whiche đã giúp, nhưng sau đó tôi nhớd Spork đôi khi có thể ba vấn đề một chút, vì vậy tôi khởi động lại Spork mà không cần require và sau đó nó hoạt động tốt.

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