2010-06-12 35 views
15

Tôi có RSpec (1.3.0) nhiệm vụ sau đây theo quy định tại Rakefile tôi:Tại sao thông số RSpec của tôi chạy hai lần?

require 'spec/rake/spectask' 
Spec::Rake::SpecTask.new(:spec) do |spec| 
    spec.libs << 'lib' << 'spec' 
    spec.spec_files = FileList['spec/**/*_spec.rb'] 
end 

Tôi đã sau trong spec/spec_helper.rb:

require 'rubygems' 
require 'spec' 
require 'spec/autorun' 
require 'rack/test' 
require 'webmock/rspec' 

include Rack::Test::Methods 
include WebMock 

require 'omniauth/core' 

Tôi có một spec đơn khai báo trong spec/foo/foo_spec.rb:

require File.dirname(__FILE__) + '/../spec_helper' 

describe Foo do 
    describe '#bar' do 
    it 'be bar-like' do 
     Foo.new.bar.should == 'bar' 
    end 
    end 
end 

Khi tôi chạy rake spec, ví dụ đơn lẻ chạy hai lần. Tôi có thể kiểm tra nó bằng cách làm ví dụ thất bại, cho tôi hai chữ "F" màu đỏ.

Một điều tôi nghĩ là thêm spec vào SpecTask 's libs đã khiến chúng được xác định hai lần, nhưng việc loại bỏ điều đó dường như không có hiệu lực.

Trả lời

2

Không biết nếu điều này sửa chữa vấn đề, nhưng bạn có thể sử dụng require 'spec_helper' thay vì require File.dirname(__FILE__) + '/../spec_helper'

Ngoài ra, 'spec/autorun' sẽ require 'spec' cho bạn.

Điều duy nhất tôi có thể nghĩ là bạn có hai nhiệm vụ cụ thể được xác định trong hệ thống của bạn. Đây có phải là ứng dụng đường ray không? Nếu vậy, hãy đảm bảo bạn không sao chép tác vụ cào đã tồn tại trong lib/rake/tasks.

HTH, David

+0

Nó không phải là một ứng dụng Rails, do đó, đó không phải là vấn đề. Tôi chỉ có thể làm 'require 'spec_helper'' nếu' $ LOAD_PATH' của tôi đã được thiết lập, nhưng nếu tôi muốn chạy một spec, '$ LOAD_PATH' sẽ không được đặt cho đến khi bên trong' spec_helper.rb'. –

3

này không liên quan trực tiếp đến câu hỏi như thế này rõ ràng liên quan đến phiên bản RSpec từ 2 trở đi, nhưng như tiêu đề của câu hỏi là như nhau mà mang tôi đến đây, tôi đề cập đến những người khác có thể tìm thấy trang này vì lý do tương tự, rằng có rspec.rake trong số lib/tasks của bạn có thể làm cho rake spec chạy tất cả các kiểm tra thông số kỹ thuật hai lần. Loại bỏ tập tin đó đã giúp tôi (như đã được đề xuất tại địa chỉ: http://www.patrickgannon.net/post/519eed022c17433fc8000018/rake-runs-rspec-tests-twice)

19

Tôi có vấn đề này bằng zeus, và loại bỏ require 'rails/autorun' từ tôi spec_helper.rb dừng lại nó cho tôi

+0

Tôi không có dòng này và tôi vẫn gặp sự cố này. Bạn có ý tưởng nào khác không? –

+1

Lời khuyên tốt nhất tôi có thể cung cấp cho bạn ngay bây giờ là nâng cấp lên đường ray 4.1 và nhận Spring được tích hợp sẵn, điều này sẽ cho phép bạn ngừng sử dụng Zeus hoàn toàn. –

+0

Đã sửa lỗi cho tôi, cảm ơn. :) – Gerry

1

nguyên nhân khác, cũng trong spec_helper.rb là sử dụng mã sau:

RSpec.configure do |config| 
    #config stuff 
end 

Các thử nghiệm chỉ được thực hiện một lần sau khi xóa mã này.

+0

[Tôi đã có mã cấu hình nơi bạn có nhận xét] (http://i.imgur.com/sApPy0a.png). Loại bỏ nó làm cho các bài kiểm tra của tôi chạy một lần. Tôi cung không chăc tại sao. Có vẻ như tôi sẽ cần sử dụng '~/.rspec' để thay thế. – Dennis

8

Cấu hình sao chép trong spec_helper.rb và .rspec đã khiến các thử nghiệm của tôi chạy hai lần.

ví dụ:

.rspec

--color 

spec_helper.rb

Rspec.configure do |config| 
    config.color = true 
end 

Vì vậy, nó dường như lặp lại trong các bài kiểm tra khi bạn có cấu hình CÙNG đặt cài lặp lại ở .rspec và spec_helper.rb

+0

Chỉ có tập tin '.rspec' làm cho nó chạy hai lần, tôi thậm chí không cần cài đặt trùng lặp –

+0

Tôi đã có' --color' và '--format d' trong' ~/.rspec' và 'config. color = true' và 'config.formatter =: documentation' trong mã của tôi. Đã phải loại bỏ các bản sao để không có rspec chạy hai lần (không quan trọng nếu tôi gỡ bỏ từ mã hoặc tập tin cấu hình). – dentarg

+0

Thông tin thêm: "Bạn đang thêm hai trình định dạng, do đó, tăng gấp đôi đầu ra", chủ sở hữu rspec nói tại https://github.com/rspec/rspec-core/issues/1929#issuecomment-90771361 – dentarg

5

Hóa ra Rails có mặc định spec nhiệm vụ, vì vậy nếu bạn đang sử dụng Rails, giải pháp cho các vấn đề sẽ được rõ ràng nhiệm vụ được xác định trước và sau đó tái khởi logic tùy chỉnh của bạn, như thế này:

# ... beginning of Rails Rakefile 
Rails.application.load_tasks 

Rake::Task["spec"].clear 

RSpec::Core::RakeTask.new(:spec) do |t| 
    # your logic here 
end 
1

Tôi quan sát thấy một điều tương tự. Nhưng trong trường hợp của tôi không phải là các bài kiểm tra chạy hai lần, chúng được in hai lần.

Lý do cho điều này, tôi phát hiện ra, là tôi bí danh rspec đến rspec -f d -c (định dạng tài liệu và màu sắc).

Và spec_helper.rb chứa

config.color = true 
config.formatter = :documentation 

Vì vậy, về cơ bản thông tin này được nhân đôi. Sau khi tôi chạy unalias rspec, tôi chạy lại các thử nghiệm của mình, sự cố đã được khắc phục.

Bạn cũng có thể có một tập tin .rspec có chứa thông tin tương tự:

--format d 
--color 

này cũng có thể dẫn đến việc trùng lặp. Vì vậy, sửa đổi hoặc di chuyển tệp này.

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