javascript - 请求 api 时如何在量角器的 api 正文中传递值
问题描述
我想在 API 请求正文中传递值。我为此尝试了下面的代码
var options = { method: 'POST',
url: 'https://ssgpreprod.serviceurl.in/gonogo-api/atm/tw/cro-approval',
headers:
{ 'Postman-Token': '9d6a0ad1-c3a1-402f-b845-b6416f49df6b',
'cache-control': 'no-cache',
'Content-Type': 'application/json' },
body:
{ oHeader:
{ sReqType: 'application/json',
sAppSource: 'WEB 2.02.01',
sSourceID: 'GONOGO_HDBFS',
sAppID: 610961419000670,
dtSubmit: '',
sCroId: 'HDB_TW_CRO@cell.com',
sDsaId: 'default',
sInstID: 4019,
sUserName: 'CHDBTWCRO',
sProduct: 'TW',
sDealerId: '61096' },
sRefID:testData.twPreIpa.twReferenceId,
sAppStat: testData.twCroDetails.twCroDecision,
aCroJustification: [ { sRemark: testData.twCroDetails.twRemark, sSubTo: testData.twCroDetails.twSubjectTo} ],
bApprAmtExist: true,
dApprAmt: testData.twApplyDetails.twLoanAmount,
dItrRt: testData.twCroDetails.twRoi,
dLtv: testData.twCroDetails.twLtv,
aDedupeRefID: [] },
json: true };
request(options, function (error, response, body) {
if (error) throw new Error(error);
browser.logger.info(JSON.stringify(body));
browser.logger.info(JSON.stringify(response));
browser.logger.info('status code is : ' + response.statusCode);
expect(response.statusCode).toBe(200).then(function () {
browser.logger.info('case is approved');
this.logOut(testData);
})
});
我从 xlsx 文件(即 testData.twPreIpa.twReferenceId)传递值,但我得到 422 状态代码和低于输出
[2019-05-28 15:42:10.403] [INFO] : - {"title":"Conversion Failed","status":422,"detail":"您发送的内容可能格式错误。"}
另外,当我添加 - browser.logger.info('approved'); 上面的 var 选项打印在控制台上.. 但是当我添加 - browser.logger.info(testData.twPreIpa.twReferenceId);
它给了我错误..输出显示-
失败:无法读取未定义的属性“twReferenceId”类型错误:无法读取未定义的属性“twReferenceId”
解决方案
虽然这可能不会直接回答您的问题,但它应该对您有所帮助。我研究了一个与(我假设)你的框架类似的框架,一些 api 和一些 UI 验证。
我的 API 调用有一个单独的类,它返回一些值,有时是整个响应体。我允许自己传递我需要的任何主体作为参数。
这是我采用的方法的一个例子。
module.exports = class Endpoints {
addSomethingToUser(bearerToken, userId, JSONbody) {
//Function will preform a POST request and return the status code if successful
//Else if will return the body of the response
let endpoint = 'http://myApp.com:9090/api/users/' + userId;
return new Promise((resolve, reject) => {
let options = {
method: "POST",
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token,
},
body: JSON.stringify(JSONbody),
};
request(
endpoint,
options ,
function (error, response, body) {
if (!error && (response.statusCode >= 200 && response.statusCode < 300)) {
resolve(response.statusCode);
} else {
console.log('error:', error, response && response.statusCode);
reject(JSON.stringify(response, undefined, 2));
};
}
);
});
};
}
它被称为
let apiCallsFile = require('../apiCalls/restCalls');
let apiCalls = new apiCallsFile();
it('simple test', async function(){
let requiredBody = {
"NAME": "Test Name",
"GENDER": "MALE",
};
let apiResult = await apiCalls.addSomethingToUser(bearerToken, userId, requiredBody );
expect(apiResult).toBe('201');
}
您的问题似乎与您在 excel 中使用的实际值有关。在尝试发送请求之前,您应该尝试打印出您的值,以确保它们都存在并且采用您期望的格式。
推荐阅读
- java - java.lang.String android.net.Uri.toString() 在空对象引用上,LogCat 在第 202 行显示此错误
- python - 如何在不继承属性值的情况下在 Python 中的 for 循环内创建对象列表
- java - Java比较创建的链表
- google-cloud-platform - GCP 上的无服务器架构和数据驻留问题
- python - 从 Python 函数调用 `dt.` 类型
- python - 输入被删除时如何读取行
- javascript - 如何用for循环中的变量替换索引?
- assembly - 确定执行 AVR 汇编语言代码需要多少时钟周期
- bash - 根据另一个目录中文件的匹配子字符串重命名一个目录中的所有文件
- python - 未检测到 MSO_CONNECT。获取幻灯片上的行数?