2013-01-23 28 views
7

Tôi đang sử dụng Guard gemBảo vệ, cách theo dõi tạm thời tệp cụ thể?

Tại một thời điểm phát triển, tôi chỉ cần theo dõi một tệp hoặc một số tệp nhất định chứ không phải toàn bộ dự án.

Có cách nào tiện dụng để tạm thời theo dõi một tệp cụ thể không?

Tôi biết nó có thể được thực hiện bằng cách sửa đổi tập tin bảo vệ nhưng tôi không nghĩ rằng đó là một giải pháp gọn gàng.

+0

Vui lòng giải thích lý do bạn đang tìm giải pháp này. Ngoài ra, nó sẽ luôn luôn được theo dõi một tập tin duy nhất, hoặc bạn có thể tưởng tượng muốn chuyển đổi theo dõi trên nhiều tập tin? – crftr

+0

Trong trường hợp khi tôi có rất nhiều bài kiểm tra bị hỏng, người bảo vệ sẽ mang đến cho tôi một loạt thông điệp. Đó là lý do tại sao tôi chỉ muốn nhận tin nhắn từ các tập tin tôi đang làm việc. – megas

Trả lời

10

Trên thực tế bạn chỉ có thể sử dụng focus: true trong báo cáo it ví dụ:

Trong file Spec của bạn.

it "needs to focus on this!", focus: => true do 
    #test written here. 
end 

Sau đó, trong spec/spec_helper bạn cần thêm tùy chọn cấu hình.

RSpec.configure do |config| 
    config.treat_symbols_as_metadata_keys_with_true_values = true 
    config.filter_run :focus => true 
    config.run_all_when_everything_filtered = true 
end 

Sau đó, Cảnh sát sẽ tự động nhận kiểm tra tập trung và chỉ chạy thử. Ngoài ra, config.run_all_when_everything_filtered = true yêu cầu bảo vệ chạy tất cả các kiểm tra khi không có gì được lọc mặc dù tên có vẻ gây hiểu lầm.

Tôi tìm thấy đường ray của Ryan Bate diễn ra rất hữu ích trên GuardSpork.

+0

Điều đó thật đơn giản, cảm ơn – megas

+0

Rất cám ơn vì điều này, biến cấu hình cuối cùng là gây hiểu nhầm khủng khiếp. Chỉnh sửa được đề xuất: Vì 'config.treat_symbols_as_metadata_keys_with_true_values' đang bật, dòng spec 'it' cần tập trung vào điều này!", Focus: => true do' có thể được rút ngắn thành 'it 'cần tập trung vào điều này!" ,: focus do' – yoz

+0

Đối với rspec 3 'config.filter_run_when_matching: focus' là đủ và" Khi không có gì được gắn thẻ với ': focus', tất cả các ví dụ đều chạy." –

0

Bạn có thể sửa đổi vĩnh viễn tệp bảo vệ để kiểm tra biến môi trường bạn chọn và hoạt động khác nếu có. Ví dụ, truy cập biến ENV ['FILE']. Sau đó, bạn có thể thêm lệnh để chạy bảo vệ với FILE=foo.rb bất cứ khi nào bạn muốn.

3

Có lẽ groups sẽ hoạt động cho bạn?

# In your Guardfile 
group :focus do 
    guard :ruby do 
    watch('file_to_focus_on.rb') 
    end 
end 

# Run it with 
guard -g focus 

Tôi biết bạn nói bạn không muốn thay đổi Guardfile, nhưng thêm một nhóm sẽ chỉ cần phải được thực hiện một lần, không phải mỗi khi bạn chuyển từ xem dự án để một bộ tập trung và ngược lại. Tất nhiên nếu tập hợp các tập tin bạn cần tập trung vào các thay đổi, bạn sẽ cần thay đổi số arg thành watch (và có thể thêm nhiều người theo dõi hơn), nhưng tôi nghĩ bạn sẽ phải chỉ định chúng ở đâu đó và điều này có vẻ như như là một nơi tốt như bất kỳ. Thay vào đó, nếu bạn thực sự không muốn liệt kê các tệp cần tập trung vào Guardfile, bạn có thể có nhóm : tập trung đọc trong danh sách tệp từ một tệp riêng biệt hoặc biến môi trường như được đề xuất bởi David above. Guardfile chỉ đơn giản là ruby ​​(có quyền truy cập vào DSL bảo vệ), vì vậy thật dễ dàng để đọc một tệp hoặc biến ENV.

+0

Tôi thích nó, nhưng nó tạo ra lỗi - Không thể tải 'bảo vệ/ruby' hoặc tìm lớp Guard :: Ruby. Tôi không thể giải quyết điều này, bất cứ suy nghĩ nào? – megas

+0

Tôi thay đổi bảo vệ: ruby ​​để bảo vệ 'rspec', lúc bắt đầu bảo vệ chạy đúng tập tin nhưng sau đó nó chạy tất cả các bài kiểm tra, do đó, không có gì thay đổi rất nhiều. – megas

+1

Plugin bảo vệ ruby ​​có thể được tìm thấy tại đây (https://github.com/JustinLove/guard-ruby). Với plugin bảo vệ-rspec có một số cách để tập trung vào một vài tệp. @ oto-brglez đã mô tả một cách trong một câu trả lời riêng biệt mà làm cho việc sử dụng các tùy chọn dòng lệnh rspec. Readme bảo vệ-rspec có một [section] (https://github.com/guard/guard-rspec#running-a-subset-of-all-specs) khi chạy một tập hợp con. Hãy cho tôi biết nếu các con trỏ này không hoạt động cho bạn và tôi có thể cập nhật câu trả lời với nhiều chi tiết hơn. – exbinary

1

Nếu bạn sử dụng guard-rspec. Bạn có thể làm được việc này.

Thay đổi Guardfile khối rspec của bạn vì vậy đó là có một cái gì đó như thế này:

guard 'rspec', :cli => ENV['RSPEC_e'].nil? ? "": "-e #{ENV['RSPEC_e']}") do 
    # ... regular rspec-rails stuff goes here ... 
end 

Bắt đầu Guard. Và đặt RSPEC_e trước đây. Giống như vậy ...

RSPEC_e=here guard 

Sau đó, khi bạn thay đổi thông số chỉ có văn bản "ở đây" (do RSPEC_e) đặt trong mô tả của chúng sẽ được chạy lại.

+2

Ngoài ra còn có tùy chọn [--tag] (https://www.relishapp.com/rspec/rspec-core/docs/command-line/tag-option!) Có thể đơn giản hơn so với ở trên. 'guard 'rspec',: cli => '-t focus' do ...' và nó sẽ chỉ chạy các ví dụ được gắn thẻ focus => true, ví dụ: 'it 'đang khiến tôi gặp rắc rối",: focus => true do ... ' – exbinary

+0

Các thẻ Yeah cũng sẽ hoạt động độc đáo, nhưng sau đó bạn phải gắn thẻ thông số kỹ thuật của mình. Nếu bạn sử dụng -e bạn chỉ có thể phù hợp với văn bản ... –

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