Thật không may, VCR rất không tương thích với capybara-webkit. Thực tế là trang web capybara đang sử dụng webkit, vốn có trong c. Webmock và Fakeweb, là cơ sở cho VCR, chỉ có thể được sử dụng cho các yêu cầu web của Ruby. Làm cho hai công việc với nhau có thể sẽ là một nhiệm vụ hoành tráng.
Tôi đã giải quyết vấn đề này theo hai cách:
đầu tiên (hacky, nhưng hợp lệ) là thêm một tập tin javascript mới đến ứng dụng mà chỉ được bao gồm trong các môi trường thử nghiệm. Tệp này loại bỏ các lớp JS tạo các yêu cầu web bên ngoài. Ngoài hackatude thuần túy của cách tiếp cận này, nó đòi hỏi rằng mỗi khi một yêu cầu mới được thêm vào hoặc thay đổi, bạn phải thay đổi stubs là tốt.
Cách tiếp cận thứ hai là định tuyến tất cả yêu cầu bên ngoài thông qua máy chủ của riêng tôi, ủy quyền hiệu quả tất cả yêu cầu bên ngoài thông qua máy chủ của tôi. Điều này có những bất lợi lớn mà bạn phải có một hành động cho tất cả mọi thứ bạn muốn tiêu thụ (bạn có thể genericize nó, với một số công việc). Nó cũng bị thực tế là nó có thể gấp đôi thời gian cho yêu cầu hoàn thành. Tuy nhiên, kể từ khi các yêu cầu hiện đang được thực hiện bởi Ruby, bạn có thể sử dụng VCR trong tất cả các vinh quang của nó.
Trong trường hợp của tôi, cách tiếp cận # 2 đã được nhiều lợi thế của tôi nhờ vào thực tế là tôi cần ruby để thao tác dữ liệu để tôi có thể giữ nguồn JavaScript bất khả tri của mình. Tuy nhiên, tôi đã sử dụng phương pháp # 1 trong một thời gian khá thành công.
Nguồn
2012-06-26 19:57:15
Bạn có thể chạy một máy chủ proxy có mục đích chung khá dễ dàng. Tôi không thể tìm thấy nhiều trong Ruby. Tôi muốn đề nghị [mousehole] (https://github.com/evaryont/mousehole) nếu bạn muốn gắn bó với hệ sinh thái Ruby. –
Phải, bạn có thể. Chúng tôi đã ném điều đó ra vì những phụ thuộc hệ điều hành và cơn ác mộng cấu hình mà chúng tôi đã thấy đến với cách tiếp cận đó. –
bạn gặp phải khó khăn gì khi phân tích dựa trên proxy-server? Chỉ cần thay đổi cài đặt proxy trên hộp chạy capybara-webkit? –