Вам нужно будет сделать 3 версии этого шага, одну с контрактом, одну с контрактом и порталом и одну без них.
Given(/^I log in as ([\w-]+)$/,(user)=>{
// log in
});
Given(/^I log in as ([\w-]+) with the contract ([\w-]+)$/, (user, contract) => {
// log in with contract
});
Given(/^I log in as ([\w-]+) with the contract ([\w-]+) for portal ([\w-]+)$/, (user, contract, portal)=>{
// log in with contract for portal
});
Необязательные параметры на самом деле не годятся для огурца, чтоэто небольшая проблема, но так как все шаги пытаются достичь разных целей (я знаю, технически все они пытаются войти в систему, но я имею в виду, что они входят в систему разными способами), используя один и тот же шаг с несколькимиварианты его завершения могут означать, что ваш шаг пытается достичь слишком многого.
В вашем определении шага, несомненно, есть несколько условных операторов, которые зависят от параметров, которые проходят.Почему бы не упростить его, определив их как разные (но похожие) шаги?
Если вы чувствуете, что они достаточно похожи, то для обхода кода в одном месте можно создать функцию входа в систему, которая принимает 3 параметра.2 из которых являются необязательными.
function logIn(user, contract = null, portal = null){
// do your single step stuff here
}
Given(/^I log in as ([\w-]+)$/,(user)=>{
return logIn(user);
});
Given(/^I log in as ([\w-]+) with the contract ([\w-]+)$/, (user, contract) => {
return logIn(user, contract);
});
Given(/^I log in as ([\w-]+) with the contract ([\w-]+) for portal ([\w-]+)$/, (user, contract, portal)=>{
return logIn(user, contract, portal);
});