私は、私たちのサイトの1つに対して夜間のテストを設定しており、私たちがテストを割り当てているテストペルソナを持つように構造化しました。私たちが開発環境でのみテストを実行する限り、これはすばらしい結果でした。残念ながら、私たちは、実行されている環境に基づいて実行する必要があるペルソナのプロパティとテストを動的に設定する必要があります。データベースから実行する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