2010-01-15 11 views
11

Ruby on Rails projemde BDD gelişimi için Cucumber'i kullanıyorum ve path.rb'nin ray uygulamalarında kullanılan yolları nasıl kullandığı konusunda bir karışıklık içerisindeyim.Salatalık ve webrat - paths.rb'deki dinamik URL'ler nasıl kullanılır?

class Parent < ActiveRecord::Base 
    has_many :children 
end 

class Child < ActiveRecord::Base 
    belongs_to :parent 
end 

ve ben şu Salatalık özelliği vardır:

Ben Verilen olarak tanımlanan yol ile

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 

Ben rastlamak sorun özelliği çalıştırırken aşağıdaki hata:

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

Gerçekten ne umrumda değil: id. Bunun yerine ne yapmalıyım? Bu varsayılan web adımları ile mümkün mü? Problemi yanlış şekilde mi düşünüyorum?

cevap

18

aşağıdaki gibi en iyi yol olmayabilir bunu yapmak yoludur: Bir kullanıcı "yeni" düğmesini tıklayan her Bizim uygulamasında

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

, her zaman veritabanında yeni bir kayıt istedi . Böylelikle, kontrol cihazımızın yeni eylemi otomatik olarak oluşturmaya başlar ve daha sonra düzenleme eylemine yönlendirir.

Testte benzer bir sorunla karşı karşıya kaldık, kimliğin ne olduğu hakkında çok fazla şey yapmadık - sadece uygulamanın düzenleme sayfasına ulaştık.

İşte ben buyum.

(NOT: adım tanım Kapibara kullanılarak yazılır, ancak webrat çok farklı olmamalıdır)

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 

temel önermesi olduğunu bir Raylar düzenleme sayfasında olduğunuzda, düzenlediğiniz model için bir form olacaktır. Bu form, her zaman düzenlediğiniz belirli kaydın kimliğine sahip gizli bir alan içerir.

Adım, gizli alanı bulur, kimliği kendisinden çıkarır ve ardından bu modelin yolunu çözmek için bir web_step arar.

Sadece baktığınız modelle eşleşen bir yolunuz olduğundan emin olun.

when /the edit person page for "([^\"]*)"/ 
    edit_person_path($1) 
İlgili konular