2014-10-13 1 views
0

내 코드에서 한 번에 current_page를 설정하고 다시 사용하도록 전역 변수를 넣어야하는 경우가 있습니다. 다른 단계)site_prism을 사용하면 @current_page라는 변수를 사용하는 것이 가장 좋은 방법을 모르겠다.

Then /^I open the "(.*?)" form$/ do |form_type| 
    form_page = "#{form_type}_page" 
    @current_page = @home_page.send(form_page.to_sym) 
    # here current page is not always the same page but they all have the open_form method 
    @current_page.open_the_form 
end 

Then /^I should ....$/ do 
    # here current_page reuse the data from the previous step 
    @current_page.do_something 
    # but sometimes, we dont know where is set the variable "current_page" 
end 

그러나 우리는 코드를 읽을 때, 때때로, 우리는 @current_page 어떤 페이지 이해 해달라고 때문에, 내 동료들과 일부 유지 보수 문제가?

이 경우 가장 좋은 방법은 무엇입니까?

"current_page"변수를 유지 관리 문제 또는 모호성없이 어떻게 사용합니까?

답변

2

저희 팀에서는 글로벌 페이지 변수가 항상 올바른 모델을 항상 참조해야한다는 규칙을 수립했습니다. 모델을 직접 설정하는 대신 몇 가지 도우미를 사용합니다.

또한 페이지 정의와 단계가 동일한 파일로 이동한다는 규칙을 설정했습니다. 예 some_page.rb

class SomePage < SitePrism::Page 
    set_url '/lol' 
    set_url_matcher /#{@target}\/lol/ 

    element :button, 'button' 
    element :some_image, 'img' 
end 

Given /^I have reached SomePage$/ do 
    load_page SomePage 
end 

When /^I click a button on Some Page$/ do 
    @page.button.click 
end 

Then /^I should be on Some Page$/ do 
    ensure_page SomePage 
end 

Then /^Some Page should have an image$/ do 
    @page.should have_some_image 
end 

이 이상한 것, 그리고 모범 사례의 모든 종류에 갈 수도 -하지만 내 팀을 위해 좋은 일하고있어. 각 페이지와 함께 결합 된 단계 정의를 사용하면 정의 내에서 @page가 참조하는 것을 정확히 알 수 있으며, 요소를 찾은 다음 매핑을 추가하는 것이 훨씬 쉽습니다 (또는 매핑을 더 추가 할 수 있습니다). 특정 페이지에 대해 이미 작성한 단계가 무엇인지 신속하게 파악하므로 중복되는 단계 정의가 줄어 듭니다.

드문 경우지만 한 페이지 정의가 여러 페이지에 사용되는 경우 별도의 헬퍼 파일이 있습니다.

전역 @page 변수를 설정하고 사용하는 데 도움이되는 몇 가지 도우미가 있습니다. 이들을 사용하면 또 다른 규칙은 절대로하지 않을 것입니다. @page = SomePage.new 또는 @page.should be_displayed

set_page는 글로벌 변수를 제공된 페이지의 인스턴스로 설정하는 데 사용됩니다. 또한 예상 된 페이지가 표시되는지 확인하고 page # set_up을 호출합니다. 우리의 모든 페이지는 빈 set_up 메서드가있는 masterpage 클래스에서 상속받습니다. 특정 페이지가로드 될 때 초기화 코드를 추가하기 위해 페이지에서 set_up을 정의 할 수 있습니다. 우리는 우리가 올바른 페이지에있어해야 할 때마다

def set_page page_model @page = page_model.new # Ensure the expected page is actually displayed ensure_page page_model # Call the set_up method on the page @page.set_up end

ensure_page 사용됩니다. 전역 변수가 올바른 페이지를 참조하는지 확인하고 페이지가 현재 표시되는지 확인하는 데 사용됩니다. 이는 기존의 PageModel.new.load args 대신에 사용되는 전통 PageModel.new.should be_displayed

def ensure_page page_model unless @page.is_a? page_model raise PageModelIncorrect.new "@page is a #{@page.class} when #{page_model} was expected.\nCurrent URL: #{current_url}" end @page.should be_displayed end

load_page 대신에 사용된다. 제공된 인수를 사용하여 페이지를 자동으로로드 한 다음 위 메소드를 사용하여 전역 변수를 설정하면 페이지가 표시됩니다.

def load_page(page_model, *args) page = page_model.new page.load(*args) set_page page_model end

+0

사례를 공유해 주셔서 감사합니다. 우리 팀을 도울 것입니다. –

+0

대단히 환영합니다! 도움이된다면 응답을 승인 된 답변으로 표시하여 더 이상 대답하지 않는 것으로 표시하십시오. 그래도 궁금한 점이 있으면 기꺼이 도와 드리겠습니다. –

관련 문제