proxyquire-stub-lambda-class 是一个 Node.js 的模块,它提供了一个方便的方式在测试 AWS Lambda 代码时,将其相互独立地测试。它可以帮助你:
- 将 Lambda 函数和其所需的依赖分离开来,从而使测试更简单
- 在测试中以更直白的方式拟造事件和 Lambda 上下文
安装
可以使用 npm 安装 proxyquire-stub-lambda-class:
npm install proxyquire-stub-lambda-class --save-dev
安装完成后,就可以在测试代码中引入它了。
使用
proxyquire-stub-lambda-class 通过使用 Frisby([frisbyjs.com](http://frisbyjs.com/))风格创建测试。Frisby 是一个流行的 Node.js 测试框架,它帮助开发人员编写 RESTful API 测试,成功将其测试变得容易。proxyquire-stub-lambda-class 借鉴了 Frisby 的语法和哲学,使测试 Lambda 函数变得容易。
引入库,并通过类继承的方式创造测试:
-- -------------------- ---- ------- ----- ------------ - ---------------------------------------- ----- ------------------ ------- ------------ - ----- ------------- - ----- ----- - - ----- ---------------- ---- -------- --- --------------- - --- ------ -- -- -------------------------- ----- ---------- -- - ----- ---- - -------------------------- ------------------------------------- --- ----- --------------------------------- - ----- ---------- - ----- ----- - - ----- ---------------- ---- -------- --- --------------- - --- ------ -- -- -------------------------- ----- ---------- -- - ----- ---- - -------------------------- ------------------------------------- --- ----- --------------------------------- - -
在上面的代码中,我们使用 proxyquire-stub-lambda-class
导入库,并创建了一个类 TestLambdaFunction
,它是从 proxyquire-stub-lambda-class
继承而来的。
类 TestLambdaFunction
中有两个异步方法,testSuccess
和 testFail
。testSuccess
方法用于测试无错误的执行情况,testFail
用于测试错误的执行情况。
每个方法都包含一个 event
参数,它是一个 JSON 对象,表示上下文对象。测试使用 expectSuccess
和 expectFailure
方法。
expectSuccess
方法需要 event
和一个回调函数,用于在成功时执行代码。这里我们将 response 中的 statusCode 比较是否等于 200。expectFailure
方法同样需要 event
和一个回调函数,但是在错误发生时执行。
使用 invokeLambdaFunction
方法来执行 Lambda 函数。
示例
下面提供一个示例 Lambda 函数,用于演示如何测试 AWS Lambda 函数:
-- -------------------- ---- ------- --------------- - ----- ------- -- - ----- ---- - ----------------------- ----- -------- - - ----------- ---- ----- ---------------- -------- ------ --------------- --- -- ------ --------- --
您可以将上面的 Lambda 函数拷贝到 lambda.js
文件中。接下来,创建测试脚本。需要执行以下步骤:
安装
proxyquire-stub-lambda-class
:npm install proxyquire-stub-lambda-class --save-dev
创建
test.js
文件,并在该文件中创建TestLambdaFunction
类:-- -------------------- ---- ------- ----- ------------ - ---------------------------------------- ----- ------------------ ------- ------------ - ----- ------------- - ----- ----- - - ----- ---------------- ----- -------- --- -- -------------------------- ----- ---------- -- - ----- ---- - -------------------------- ----------------------------------- --------- --- ----- --------------------------------- - ----- ---------- - ----- ----- - - ----- ------------------- -- -------------------------- ----- ---------- -- - ----- ---- - -------------------------- ---------------------------------- ------ -- -- ------ ---- -- ----- --- ------- --- ----- --------------------------------- - -
在上述示例中,我们实现了两个测试方法:
testSuccess
和testFail
。第一个方法测试正常的执行情况,第二个测试待处理错误的情况。执行测试:
const test = new TestLambdaFunction('lambda', 'handler'); test.testSuccess(); test.testFail();
这里创建一个
test
对象,完整的构造函数为TestLambdaFunction(cwd, handler)
。第一个参数表示当前工作目录,第二个参数为要测试的处理程序的引用。在这种情况下,我们想测试的是lambda.js
文件中的handler
函数。
执行测试 npm run test
,你可以看到以下输出:
-- -------------------- ---- ------- ---- ------- ------------------ - ---- ------- ------ - ---- ------ ----- ----------- ------------------------------- ------- -------- ------ -- ------------------------------ --------------- ----------- ------------------------------- ------- -------- ------ -- --------------------------- --------------- ---- ------- - ------- - ----- ------ - ------- - -----
总结
proxyquire-stub-lambda-class
简化了 AWS Lambda 函数的测试,或是使用它来测试你的 serverless 或 api 端点的代码。
借助 Frisby 风格的 API,使用 proxyquire-stub-lambda-class 编写测试非常容易。
参考链接
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005753c81e8991b448ea49d