2010-01-15 22 views
11

Tôi đang sử dụng Dưa chuột để phát triển BDD trong dự án Ruby on Rails của mình và tôi đang gặp một số nhầm lẫn về cách path.rb xử lý các đường dẫn được sử dụng trong các ứng dụng đường ray.Dưa chuột và webrat - Cách xử lý các URL động trong paths.rb?

Given tôi có:

class Parent < ActiveRecord::Base 
    has_many :children 
end 

class Child < ActiveRecord::Base 
    belongs_to :parent 
end 

và tôi có các tính năng Dưa chuột sau:

Scenario: A test feature 
    Given I am on the parent page 
    When I follow "Link to Children" 
    Then I should be on the children list page 

với đường dẫn được xác định như sau:

def path_to(page_name) 
    case page_name 
    when /the children list page/ 
     '/parents/:id/children' 
end 

Vấn đề tôi gặp là lỗi sau khi chạy đối tượng địa lý:

Spec::Expectations::ExpectationNotMetError: expected: "/parents/:id/children", 
got: "/parents/1726/children" (using ==) 

Tôi thực sự không quan tâm id là gì. Tôi nên làm gì? Điều này thậm chí có thể thực hiện được với các bước web mặc định không? Tôi đang nghĩ về vấn đề theo cách sai?

Trả lời

18

Cách tôi làm điều đó, có thể không phải là cách tốt nhất là như sau:

when /the children list page for "(.+)"/ 
    p = Parent.find_by_name($1) 
    parent_children_path(p) 
2

Trong ứng dụng của chúng tôi, chúng tôi luôn muốn có một kỷ lục mới trong cơ sở dữ liệu bất cứ khi nào người dùng nhấp vào nút "mới" . Do đó, hành động mới của bộ điều khiển của chúng tôi sẽ tự động tạo và sau đó chuyển hướng đến hành động chỉnh sửa.

Chúng tôi phải đối mặt với một vấn đề tương tự khi thử nghiệm, khi chúng tôi không quan tâm quá nhiều về ID - chỉ cần đến trang chỉnh sửa cho ứng dụng.

Đây là những gì tôi nghĩ ra.

(Chú ý: Định nghĩa bước được viết bằng Capybara, nhưng nó không nên quá khác biệt so với webrat)

Then /^(?:|I)should now be editing the (.*)$/ do |model| 
    id = find_by_id("#{model}_id").value 
    Then "I should be on the edit #{model} page for \"#{id}\"" 
end 

Những tiền đề cơ bản là khi bạn đang ở trên một chỉnh sửa trang Rails, sẽ có một biểu mẫu cho mô hình bạn đang chỉnh sửa. Biểu mẫu đó luôn chứa một trường ẩn có ID của bản ghi cụ thể mà bạn đang chỉnh sửa.

Bước tìm trường ẩn, trích xuất ID từ trường đó và sau đó tìm kiếm web_step để giải quyết đường dẫn cho mô hình đó.

Chỉ cần đảm bảo rằng bạn có đường dẫn phù hợp với mô hình bạn đang tìm kiếm.

when /the edit person page for "([^\"]*)"/ 
    edit_person_path($1) 
Các vấn đề liên quan