2012-11-06 11 views
12

Trong ứng dụng Rails của tôi, tôi có một bộ kiểm tra chấp nhận dưa chuột để kiểm tra các trang khác nhau trong đơn đăng ký của tôi. Với dưa chuột, gắn thẻ một thử nghiệm cụ thể (kịch bản) với @javascript khiến kịch bản đó chạy bằng trình điều khiển JavaScript thay vì trình điều khiển đơn giản hơn không hỗ trợ JavaScript.Với Capybara, làm cách nào tôi có thể biết liệu trình điều khiển hiện đang được sử dụng có hỗ trợ JavaScript không?

Có cách nào dễ dàng cho các thử nghiệm của tôi để xác định xem chúng hiện có đang chạy với trình điều khiển hỗ trợ JavaScript hay trình điều khiển không hỗ trợ JavaScript không? Tôi muốn điều này để tôi có thể làm cho các bài kiểm tra của tôi hoạt động hơi khác nếu chúng đang được chạy với JavaScript được kích hoạt.

Trả lời

25

Trong trường hợp có ai quan tâm, tôi đã xem xét các documentation for Capybara và tìm thấy một giải pháp khả thi:

if Capybara.current_driver == Capybara.javascript_driver 
    # Supports JavaScript 
else 
    # Doesn't support JavaScript 
end 
+0

Ý tưởng hay - đây phải là câu trả lời được chấp nhận ... –

+0

Được rồi. Tôi đã do dự để liệt kê đây là câu trả lời được chấp nhận vì tôi là người đăng cả câu hỏi và câu trả lời này. Nhưng kể từ khi bạn có vẻ như câu trả lời này quá Tôi sẽ đi trước và chấp nhận nó. – Ajedi32

+1

Điều này là OK trừ khi javascript_driver của bạn là (nói) poltergeist, nhưng ví dụ cụ thể của bạn thực sự đang sử dụng selenium – steve

2

Trông với tôi từ this answer như là cách dễ nhất để làm điều này là để thiết lập một biến Ví dụ trong một cái móc Before:

Before('@javascript') do 
    @javascript = true 
end 

Sau đó, bạn có thể kiểm tra nếu một kịch bản được gắn thẻ trong định nghĩa bước bằng cách kiểm tra giá trị của biến mẫu đó:

When /^I go to the homepage$/ do 
    if @javascript 
    ... 
    else 
    ... 
    end 
end 

Tôi đã thử nghiệm điều này và có vẻ như nó hoạt động.

7

Đó là loại đáng ghét, nhưng đây là những gì tôi đã đổ bộ lên. Nghĩ tôi đã nhận nó từ một ý chính nơi nào đó, xin lỗi tôi bị mất liên kết với nó nhưng ít nhất nó là khá đơn giản:

def javascript_test? 
    [:selenium, :webkit, :chrome, :poltergeist].include?(Capybara.current_driver) 
end 

Nếu bạn xác định (hoặc yêu cầu trong Gemfile của bạn) js khác trình điều khiển được kích hoạt, bạn phải thêm chúng vào danh sách này.

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