저는 사이트 중 하나에 대해 야간 시침 테스트를 설정하고 테스트를 지정하는 테스트 인물을 갖도록 구조화했습니다. dev 환경에서 테스트를 실행하는 한이 모든 것이 훌륭했습니다. 불행히도 우리는 실행중인 환경에 기반하여 수행해야하는 테스트와 특성을 동적으로 설정하려고합니다.데이터베이스에서 실행할 Nightwatch.js 테스트를 동적으로 결정합니다.
문제는 테스트 컬렉션이 실행되기 전에 야간 시계가 실행되어 테스트가 실행되지 않는다는 것입니다. 나는 모든 것이 완전히 생성 된 후에 시작부터 밤의 밤을 연기하고 싶습니다.
/// <reference path="../../basepersona.ts" />
/// <reference path="../../Utilities.ts" />
namespace Tests {
export class Dealer_Persona extends BasePersona {
constructor() {
super("Dealer");
var setParameters = function (persona, results, testsCallback, getTests) {
results.forEach((param) => {
switch (param.ParameterName) {
case "UserName":
persona.UserName = param.ParameterValue;
break;
case "Password":
persona.Password = param.ParameterValue;
break;
case "CreditCardNumber":
persona.CreditCardNumber = param.ParameterValue;
break;
case "CreditCardExpireMonth":
persona.CreditCardExpireMonth = param.ParameterValue;
break;
case "CreditCardExpireYear":
persona.CreditCardExpireYear = param.ParameterValue;
break;
case "CreditCardCVV":
persona.CreditCardCVV= param.ParameterValue;
break;
}
});
getTests(persona, testsCallback);
}
this.DAL.GetParametersForPersona(this, setParameters, this.DAL.SetTestsForPersona, this.DAL.GetTestsForPersona);
}
}
}
var persona = new Tests.Dealer_Persona();
이것은 아주 기본적인 인물이며, 그 중 몇 가지 자신의 속성에 대해 매우 환경에 특정 값을 사용할 필요가 : 여기
는 예를 들어 인물이다. 또한 페르소나가 제대로로드되기 위해서는 몇 가지 콜백이 필요하므로 GetParametersForPersona 메서드는 여러 콜백 함수를 허용하고 체인의 첫 번째 단계로 작동해야합니다. 여기
는 DAL 클래스입니다 (그 중 23가) 내 문제는 내가이 인물의의를로드 할 수있는 방법을 모른다는 사실에서 유래 생각
/// <reference path="interfaces.ts" />
/// <reference path="../node_modules/@types/node/index.d.ts" />
/// <reference path="../node_modules/@types/mssql/index.d.ts" />
export class DALMethods {
constructor() {
var nextVal = false;
process.argv.forEach(function (val, index, array) {
if (nextVal) {
site = val;
}
if (val.indexOf("site") > 0) {
nextVal = true;
}
});
var Setter = new Settings();
Setter.SetVariables(site);
}
GetTestsForPersona(persona: BasePersona, callback): any {
new sql.Request(connectionString)
.input('persona', sql.VarChar(100), persona.Name)
.input('environment', sql.VarChar(10), site)
.execute('usp_AutomatedTesting_GetPersonaTests').then(function (recordsets) {
callback(persona, recordsets[0]);
}).catch(function (err) {
// ... execute error checks
});
}
GetParametersForPersona(persona: BasePersona, callback, testsCallback, getTests): any {
sql.connect(connectionString).then(function() {
new sql.Request()
.input('persona', sql.VarChar(100), persona.Name)
.input('environment', sql.VarChar(10), site)
.execute('usp_AutomatedTesting_GetPersonaParameters').then(function (recordsets) {
callback(persona, recordsets[0], testsCallback, getTests);
}).catch(function (err) {
console.log(err);
});
}).catch(function (err) {
console.log(err);
});
}
SetTestsForPersona(persona, results) {
results.forEach((param) => {
switch (param.TestName) {
case "LoginFailure":
persona.Tests.push(new LoginFailure_Test(persona));
break;
case "LoginGuestFailure":
persona.Tests.push(new LoginGuestFailure_Test(persona));
break;
case "ShippingFailure":
persona.Tests.push(new ShippingFailure_Test(persona));
break;
case "PaymentFailure":
persona.Tests.push(new PaymentFailure_Test(persona));
break;
default:
console.log(param.TestName + " does not exist");
break;
}
});
persona.Tests.forEach((x) => {
Object.defineProperty(persona, x.Name, {
value: x.Test,
configurable: true, writable: true, enumerable: true
});
});
}
}
, 설정 매개 변수를 지정하고 야간 감시가 실행될 때까지 야간 감시가 차단되어 야간 감시가 표시 될 때까지 테스트 (페르소 당 n 개의 테스트)를 지정합니다.
어떤 통찰력이라도 대단히 감사하겠습니다!
.execute() 블록 내에서 런타임에 실행하려는 모든 코드를 배치 해 볼 수 있습니까? nightwatch에 대한 모호한 이해는 명령이 일종의 대기열을 따르고 실행 블록 내에 배치하면 대기열에 포함 된 javascript가 배치됩니다. – derp