2012-02-06 12 views
9

Tôi đang cố gắng sử dụng RSpec trước (: bộ) treo với một thẻ như vậy:Sử dụng RSpec trước khi móc bộ với một thẻ

config.before(:suite, :selenium => true) do 
    #magical awesomeness 
    end 

nhưng RSpec dường như không tôn trọng các thẻ và chạy mã tôi chỉ muốn chạy với: selenium => true bất kể.

Phần lạ là tôi đang làm một điều rất tương tự với: mỗi móc như tốt và điều đó dường như làm việc tốt:

config.around(:each, :selenium => true) do |example| 
    Capybara.using_wait_time(10) do 
     Capybara.using_driver(:selenium) do 
     example.run 
     end 
    end 
    end 

Bất cứ ai biết những gì tôi đang làm sai?

Trả lời

2

Tôi đã không nhìn sâu vào nó, nhưng tôi đoán là: phạm vi bộ có thể được chạy trước khi bất kỳ thẻ nào được diễn giải. Theo như tôi có thể nghĩ, bạn chỉ muốn một: suite anyway (mặc dù tôi có thể thấy việc sử dụng trong ví dụ của bạn). Tôi nghĩ rằng nó có thể làm một trước đây: tất cả những gì sẽ làm điều tương tự, miễn là bạn đặt nó "cao" đủ, như nói trong spec_helper.rb của bạn?

== EDIT ==

Vì vậy, tôi nghĩ về nó một số chi tiết, và một giải pháp mà poped ra trong đầu tôi là một cái gì đó như thế này:

# spec_helper.rb 
# run with the tag :selenium => true when you set your env var RUN_SELENIUM like so: 
# %> RUN_SELENIUM=1 bundle exec rspec spec/ 
config.filter_run_excluding :selenium => true if ENV['RUN_SELENIUM'].nil? 

# now your before suite hook can be something along the lines of 
config.before(:suite) do 
    if ENV['RUN_SELENIUM'].nil? 
    ## regular awesomeness 
    else 
    ## magical awesomeness 
    end 
end 

Tôi đã làm một điều tương tự để xử lý thẻ sử dụng bảo vệ và bảo vệ-spec. Bạn có thể, tất nhiên, sử dụng env var mà không có filter_run_excluding, và điều đó sẽ giống như: %> RUN_SELENIUM = 1 bó exec rspec --tag selenium spec/ Việc thêm dòng cấu hình giúp duy trì sự nhất quán.

Hy vọng điều đó sẽ hữu ích!

+0

Hey Poopinpants (tên tuyệt vời btw), Yep các RSpec Lõi tài liệu nhà nước "Cảnh báo: trước (: suite,: với =>: điều kiện) Điều kiện băm được sử dụng Vì trước đó (: suite) không chạy liên quan đến bất kỳ ví dụ hoặc nhóm cụ thể nào, các điều kiện được truyền đi cùng với: bộ phần mềm được bỏ qua một cách hiệu quả. " http://rubydoc.info/github/rspec/rspec-core/master/RSpec/Core/Hooks Tuy nhiên, việc sử dụng trước (: tất cả) trong spec_helper không chạy nhiều lần trong một bộ toàn bộ nó không chính xác những gì tôi đang tìm kiếm. –

+0

Được rồi ... đã trả lời câu trả lời. Hy vọng rằng sẽ giúp. –

+0

Cảm ơn, công trình này và thông minh. – vcardillo

3

này nên làm việc:

if config.inclusion_filter[:selenium] 
    config.before(:suite) do 
    #magical awesomeness 
    end 
end 
+0

Lưu ý rằng hữu ích khi thay đổi cấu hình tùy thuộc vào tùy chọn dòng lệnh '--tag'. Với 'rspec spec --tag selenium',' config.inclusion_filter [: selenium] 'trả về true. – Nobu

+0

Điều này không hiệu quả đối với tôi. Tôi nghĩ trước đây: bộ phần mềm được chạy trước khi bất kỳ thẻ nào được diễn giải. – vcardillo