2012-08-28 9 views
12

Tôi đang ở trên Rails 3.2 và tôi đang sử dụng rspec (2.11.1). Khi tôi chạy bộ thử nghiệm của tôi với "rake spec" tôi nhận được thất bại. Khi tôi chạy nó với "rspec" mọi thứ đều trôi qua. Tôi đã nhìn thấy những đề cập khác của vấn đề này nhưng không có gì dứt khoát giải thích những gì đang diễn ra và thực hành tốt nhất là gì.Tôi có nên sử dụng "rake spec" hoặc "rspec" (không thể lấy "rake spec" để làm việc) không?

Nếu tôi làm "rake spec" hoặc "rake tmp: xóa & & rake spec" kiểm tra của tôi không thành công.

Nếu tôi thực hiện "rspec" hoặc "rspec spec" hoặc "rake db: test: hãy chuẩn bị & & rspec" kiểm tra của tôi vượt qua.

Tôi nghĩ rằng sự khác biệt duy nhất là rake đã làm "db: test: preparation" nhưng nếu tôi làm điều đó theo cách thủ công trước khi chạy rspec thì các bài kiểm tra của tôi vượt qua để không thể là tất cả câu chuyện.

Sau khi thực hiện một chút đọc, tôi đã thay đổi Gemfile của mình. Trước đây tôi đã thiết lập nó theo "Sách RSpec" (p328), nơi nó mô tả đặt viên ngọc rspec bên trong một khối "nhóm: phát triển,: thử nghiệm". Đã đọc một số bài viết SO khác mà tôi đã xóa ": phát triển" và đã thực hiện một gói. Bây giờ "rake spec" không làm gì cả. "rspec" vẫn hoạt động như trước.

Rất bối rối ...

+3

thực hiện một số khảo sát thêm. với Gemfile theo cuốn sách rspec (với: phát triển,: test) chạy rspec sử dụng môi trường 'test' trong khi rake spec sử dụng môi trường 'development'. Không chắc chắn ngay bây giờ tại sao điều này là nhưng sẽ tiếp tục tìm kiếm ... – starfry

+3

"RAILS_ENV = 'test' rake spec" hoạt động. Tôi đã dự kiến ​​sẽ kiểm tra mặc định cho môi trường thử nghiệm mà không cần phải cụ thể ... – starfry

+0

Câu trả lời của tôi đã bị xóa (lịch sự của @ bhargav-rao) như là một bản sao của http://stackoverflow.com/questions/15701298/rspec -spec-rake-spec-cung-khác nhau-kết quả/41877864 # 41877864 –

Trả lời

9

Thử chạy RAILS_ENV=test rake spec

+0

AFAIK điều này là không tốt, vì 'rake spec' sẽ gọi' db: schema: load' tại một số điểm và nếu bạn đặt môi trường theo cách này, nó sẽ thử lược đồ tải từ 'test' vào' test'? – Ali

3

Đây là những gì cố định nó cho tôi. tôi cũng đã có thể chạy rake spec RAILS_ENV=test tôi đã Gemfile của tôi như thế này

group :developmet do 
    gem 'rspec-rails','2.9.0' 
... 
end 
group :test do 
    gem 'rspec-rails','2.9.0' 
... 
end 

tôi đã thay đổi nó với điều này, thực hiện một khối để thử nghiệm và phát triển và đưa nó trước tình trạng phát triển. Tôi cũng đảm bảo rằng việc di chuyển db của tôi đã biến nó thành db thử nghiệm. db:migrate RAILS_ENV=test

group :development,:test do 
    gem 'rspec-rails','2.9.0' 
     ... 
end 
group :development do 
    ... 
end 
+2

hmm ... những tính năng này giống hệt nhau, ngoại trừ có thể lỗi chính tả "phát triển" trong Gemfile gốc? Điều đó sẽ làm cho rspec không được nạp (không âm thầm). – Rob

3

Theo rspec-ray github, đặt rspec-ray đá quý trong nhóm phát triển và thử nghiệm của Gemfile. Điều này là do nhiệm vụ kiểm tra rake tải môi trường phát triển trước khi chuyển sang môi trường thử nghiệm.

group :development, :test do 
    gem 'rspec-rails' 
end 

Ngoài ra, nếu bạn đang sử dụng Gemfile, hãy sử dụng "bundle exec rake spec" để chạy tất cả thông số kỹ thuật của bạn. Để chạy tập tin spec duy nhất, sử dụng "bó exec rake rspec path/to/spec_file". Sử dụng "bundle exec" đảm bảo bạn đang sử dụng lệnh rake chính xác được cài đặt thông qua Gemfile của bạn thay vì lệnh rake hệ thống của bạn.

Tham chiếu: https://github.com/rails/rails/issues/8591