إعادة استخدام خيار الخطوات
سؤال
أريد إعادة استخدام بعض خطوات الخيار ولكن لا يمكن أن يبدو أنه يجد الطريق الصحيح.
أريد أن أكتب خطوة مثل:
Given /^I login with (.*) credentials$/ |type|
# do stuff with type being one of "invalid" or "valid"
end
ولكن بعد ذلك، لديك خطوة أخرى مثل:
Given /^I login successfully$
# call "Given I login with valid credentials"
end
لذلك في اختبار مصادقة المستخدم، يمكنني استخدام السابق، لكن معظم الأماكن الأخرى، يمكنني استخدام الأخير، وليس في الواقع لإعادة توضيح الرمز.
هل هناك طريقة للاتصال بهذه الخطوة الأخرى، أو هل وضعت للتو من المنطق بطريقة مساعد، وسيلة دعوة المذكورة من كل مهمة (أساسا استخراج طريقة إعادة صياغة، والتي، بعد قراءة سؤالي تجعلني أعتقد أن هذه في الواقع أفضل طريقة على أي حال)؟
المحلول
تحديث: تم إهمال الطريقة الموضحة أدناه. تبدو الطريقة الموصى بها للاتصال بخطوة من داخل خطوة أخرى الآن:
Given /^I login successfully$/
step "I login with valid credentials"
end
الطريقة القديمة المهملة (للرجوع إليها):
يمكنك الاتصال بخطوات من خطوات أخرى مثل هذا:
Given /^I login successfully$/
Given "I login with valid credentials"
Then "I should be logged in"
end
إذا كانت جميع السيناريوهات داخل ميزة تتطلب هذا (أو خطوات أخرى)، فيمكنك أيضا إضافة خلفية إلى كل ميزات، مع الخطوات الشائعة، مثل ذلك:
Background:
Given I log in with valid credentials
Scenario: Change my password
Given I am on the account page
نصائح أخرى
لاحظ أن الأسلوب الخاص بالاتصال بالاتصال الخطوات في الخطوات قد تغير في الإصدارات الحديثة من الخيار، والتي سترى ما إذا كنت تحصل على خطأ مثل "تحذير": استخدام "معين / عند / بعد ذلك" يتم إهمال تعريفات الخطوة، واستخدام "الخطوة" إلى استدعاء الخطوات الأخرى بدلا من ذلك: / Path/to/step_definitions/foo_steps.rb: 631: في "كتلة" ". انظر الخيار ويكي للتفاصيل.
جوهر التغيير هو أنه يجب عليك الآن استخدام step
أو steps
طرق.
When /^I make all my stuff shiny$/
step "I polish my first thing"
end
When /^I make all my stuff shiny$/
steps %Q{
When I polish my first thing
When I shine my second thing
}
end
تتطلب الخطوات من تعريفات الخطوة هي ممارسة سيئة بعض العيوب:
- إذا فشل السيناريو، وهناك دعوات خطوة متداخلة، ستحصل على آخر تعريف خطوة تم استدعاء فقط في تتبع المكدس. قد يكون من الصعب العثور عليها من أي مكان تم استدعاءه الأخير
- دعوة إلى StepDEF أصعب في بعض الأحيان العثور على طريقة Ruby
- طرق روبي تعطيك قوة أكثر من الخطوات من الخطوات من الخطوة
aslak hellesøy. توصي لاستخراج الإجراءات الشعبية ل عالم بدلا من إعادة استخدام الخطوات. إنه يعزل هذه الإجراءات في مكان واحد، يجعل هذا الرمز أسهل في العثور عليه. يمكنك استخراج الرمز إلى فئات أو وحدات Ruby المعتادة أيضا.
#/support/world_extensions.rb
module KnowsUser
def login
visit('/login')
fill_in('User name', with: user.name)
fill_in('Password', with: user.password)
click_button('Log in')
end
def user
@user ||= User.create!(:name => 'Aslak', :password => 'xyz')
end
end
World(KnowsUser)
#/step_definitions/authentication_steps.rb
When /^I login$/ do
login
end
Given /^a logged in user$/ do
login
end
فيما يلي مناقشة مفيدة حول هذا الموضوع في القائمة البريدية الخيار - حلقة الوصل
أفضل ملف خطواتك في٪ {} بدلا من الاقتباسات. بعد ذلك، لا تحتاج إلى الهروب من اقتباسات مزدوجة والتي ستحتاج إلى استخدامها بشكل متكرر:
Given /^I login successfully$
step %{I login with valid credentials}
end
Given /^I login with (.*) credentials$/ |type|
# do stuff with type being one of "invalid" or "valid"
end
إعادة استخدام الكلمات الرئيسية في ملف الميزات التي ستوفر إعادة استخدام التعليمات البرمجية.
لا ينصح بشدة بالاتصال بخطوة Defs في غضون خطوة Defs.
أود أن أكتب ملف مائعي بهذه الطريقة،
Scenario Outline: To check login functionality
Given I login with "<username>" and "<password>"
Then I "<may or may not>" login successfully
Examples:
|username|password|may or may not|
|paul |123$ |may |
|dave |1111 |may not |
في تعريف خطوتي، (هذا هو Java)
@Given(I login with \"([^\"]*)\" and \"([^\"]*)\"$)
public void I_login_with_and(String username, String password){
//login with username and password
}
@Then(I \"([^\"]*)\" login successfully$)
public void I_login_successully_if(String validity){
if(validity.equals("may")){
//assert for valid login
}
else
if(validity.equals("may not")){
//assert for invalid login
}
}
بهذه الطريقة، هناك الكثير من تعويضات التعليمات البرمجية. نفس الشيء الذي قدمه ثم يتعامل مع سيناريوهات صالحة وغير صالحة. في الوقت نفسه، فإن ملف الميزات الخاص بك هو المنطقي للقراء.