node.js - 使用 Lambda 的测试功能进行测试时获得响应 "Null"

标签 node.js amazon-web-services testing aws-lambda amazon-connect

我正在调用一个 Lambda 函数,该函数通过 Lambda 中的 API 调用从 ServiceNow 检索数据。我已经使用 Amazon Connect 的调用流程测试了代码,但是当尝试使用 Lambda 测试功能时,它成功了,但返回的响应为空,并且至少期望返回一个名称。

从 Amazon Connect 到 Lambda 函数的输入是一个电话号码,我尝试将其添加到参数部分和 customerEndpointAddress 部分。

const https = require('https');

//Get Phone Details of Customer via Typed in Phone Number or Actual Phone Number
const getPhone = contact => {
    const phone = contact.Details.ContactData.CustomerEndpoint.Address;
    console.log(`Customer Phone is : ${phone}`);
    return phone.length === 13 ? `0${phone.substring(3)}` : phone;
}

//Set API config, passing in the Phone Parameter as query and return both firstname and SysId
const getPhoneRequestOptions = phone => {
    const path = `/api/now/table/sys_user?sysparm_query=phone%3D${phone}^ORmobile_phone%3D${phone}&sysparm_fields=first_name,sys_id`;
    return {
        host: process.env.SERVICENOW_HOST,
        port: '443',
        path: path,
        method: 'get',
        headers: {
            "Content-Type": 'application/json',
            Accept: 'application/json',
            Authorization: 'Basic ' + Buffer.from(`${process.env.SERVICENOW_USERNAME}:${process.env.SERVICENOW_PASSWORD}`).toString('base64'),
        }
    };
};

//Retrieve data, in this case firstname and SysId
const requestUser = (phone, callback) => {
    let get_request = https.request(getPhoneRequestOptions(phone), res => {
        let body = '';
        res.on('data', chunk => {body += chunk});
        res.on('end', () => {callback(JSON.parse(body))});
        res.on('error', e => {callback(e.message)});
    })
    get_request.end();
}

//Return data
exports.handler = (contact, context, callback) => {
    if (!contact.Details || !contact.Details.Parameters) return;
    requestUser(getPhone(contact), response => {
        if (response.result && response.result[0] && response.result[0].first_name) {
            callback(null, {
                "first_name": response.result[0].first_name
            });
        } else {
            callback(null, {
                "Error": "No user found"
            });
        }
    });
};

我用过的测试代码是:

{
  "Details": {
   "ContactData" :{
       "CustomerEndPoint" : {
           "Address" : "01234567890"
       }
   }
  }
}

调用代码后,名称“Abel”会在 Amazon Connect 中返回,但在针对它运行测试用例时情况并非如此。

最佳答案

是因为这一行:

if (!contact.Details || !contact.Details.Parameters) return;

在测试事件中,您使用的 Details 没有属性 Parameters(只有 ContactData)。这会导致您返回而不用回调值。

关于node.js - 使用 Lambda 的测试功能进行测试时获得响应 "Null",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56708383/

相关文章:

javascript - 如何仅在所有默认项都通过并且没有错误后才运行 Gulp 任务?

node.js - meteor 文件系统

testing - Docker——它为我们团队带来了什么真正的值(value)?

ios - 无法在 Xcode 6 Beta 5 上运行测试

Node.js如何获取mongodb中的列值

node.js - Strongloop 错误 : Cannot find module 'options'

amazon-web-services - AWS lambda : Missing export menu

amazon-web-services - .config 文件被弹性 beantalk AWS 忽略

amazon-web-services - 如何使用包 AWSS3.jl 连接到在 EC2 实例上运行的 S3 存储桶?

javascript - 在 Jest 测试中 Promise 没有被执行