2010-01-15 2 views
11

Ruby on Rails 프로젝트에서 BDD 개발을 위해 Cucumber를 사용하고 있으며 레일 애플리케이션에서 path.rb가 사용하는 경로를 처리하는 방법에 대해 혼란을 겪고 있습니다.Cucumber와 webrat - paths.rb에서 동적 URL을 처리하는 방법은 무엇입니까?

class Parent < ActiveRecord::Base 
    has_many :children 
end 

class Child < ActiveRecord::Base 
    belongs_to :parent 
end 

나는 다음 오이 기능이 있습니다 :

나는이 주어진 정의 된 경로

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 

:

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

내가 건너 문제는이다 기능을 실행할 때 다음 오류가 발생했습니다.

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

나는 정말로 : id가 무엇인지 신경 쓰지 않습니다. 대신 무엇을해야합니까? 기본 웹 단계에서도 가능합니까? 문제에 대해 잘못된 생각을하고 있습니까?

답변

18

다음과 같이 최선의 방법이 될 수 없습니다 나는 그것을 할 방법은있다 : 사용자가 "새로운"버튼을 클릭 할 때마다 우리의 응용 프로그램에서

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

, 우리는 항상 데이터베이스에 새 레코드를 원했다 . 따라서 컨트롤러의 새로운 액션은 자동으로 create를 호출 한 다음 편집 작업으로 리디렉션합니다.

우리는 ID가 무엇인지에 대해별로 신경 쓰지 않았을 때 비슷한 문제를 겪었습니다. 단지 앱의 편집 페이지에 있습니다.

다음은 내가 생각해 낸 것입니다.

(참고 : 단계 정의는 카피 바라를 사용하여 작성하지만 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 

기본 전제는 당신이 레일 편집 페이지에있을 때, 편집중인 모델에 대한 양식이 있습니다. 해당 양식에는 항상 편집중인 특정 레코드의 ID가 숨겨진 필드가 들어 있습니다.

이 단계에서는 숨겨진 필드를 찾고 ID를 추출한 다음 web_step을 찾아 해당 모델의 경로를 확인합니다.

찾고있는 모델에 맞는 경로가 있는지 확인하십시오.

when /the edit person page for "([^\"]*)"/ 
    edit_person_path($1) 
관련 문제