編集: POST 要求を API に送信し、データベース クエリを実行し、最終的にデータベース出力を API 応答と照合するいくつかのテストを作成しています。これらの個々のタスクを実行するコードがありますが、特定の注文?
var frisby = require('frisby');
var oracledb = require('oracledb');
var url = require('endpoints.js');
var auth = require('users.js');
var dbConnect = require('dbconfig.js');
var myDetails = undefined;
function submitRequest(){
frisby.create('Update contact details')
.put(url.myAccount, {
"addressLine-1": 'String',
"addressLine-2": 'String',
addressTown: 'String',
addressCounty: 'String',
addressPostcode: 'String',
homePhone: 'String',
mobilePhone: 'String'
}, {json: true})
.expectStatus(200)
.expectHeaderContains('content-type', 'application/json')
.auth(auth.username1, auth.password1)
.toss();
readDatabase();
}
function readDatabase(){
oracledb.getConnection(
{
user : dbConnect.user,
password : dbConnect.password,
connectString : dbConnect.connectString
},
function(err, connection){
if (err) {
console.error(err.message);
return;
}
connection.execute(
"SELECT addressLine1, addressLine2, addressLine3, town, county, postcode, homePhone, mobilePhone"
+ "FROM addressDetails"
+ "WHERE accountNo = 1",
function(err, result){
if (err) {
console.error(err.message);
return;
}
myDetails = JSON.stringify(result.rows);
myDetails = JSON.parse(myDetails);
});
});
matchValues();
}
function matchValues(){
frisby.create('Match Database and API Values')
.get(url.myAccount)
.expectStatus(200)
.expectHeaderContains('content-type', 'application/json')
.auth(auth.username1, auth.password1)
.afterJSON(function (body) {
expect(body.addressLine1).toMatch(myDetails[0][0])
expect(body.addressLine2).toMatch(myDetails[0][1])
expect(body.addressLine3).toMatch(myDetails[0][2])
expect(body.town).toMatch(myDetails[0][3])
expect(body.county).toMatch(myDetails[0][4])
expect(body.postcode).toMatch(myDetails[0][5])
expect(body.homePhone).toMatch(myDetails[0][6])
expect(body.mobilePhone).toMatch(myDetails[0][7])
})
.toss();
}
submitRequest();
これを実行すると、コードが常に順番に実行されるとは限らないため、テストが成功することも失敗することもあります。提案どおりに変更しましたが、まだ同じ問題があります。このシナリオにコールバック/プロミスを適用するのは難しいと感じています