npm 包 proxyquire-stub-lambda-class 使用教程

阅读时长 8 分钟读完

proxyquire-stub-lambda-class 是一个 Node.js 的模块,它提供了一个方便的方式在测试 AWS Lambda 代码时,将其相互独立地测试。它可以帮助你:

  • 将 Lambda 函数和其所需的依赖分离开来,从而使测试更简单
  • 在测试中以更直白的方式拟造事件和 Lambda 上下文

安装

可以使用 npm 安装 proxyquire-stub-lambda-class:

安装完成后,就可以在测试代码中引入它了。

使用

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 中有两个异步方法,testSuccesstestFailtestSuccess 方法用于测试无错误的执行情况,testFail 用于测试错误的执行情况。

每个方法都包含一个 event 参数,它是一个 JSON 对象,表示上下文对象。测试使用 expectSuccessexpectFailure 方法。

expectSuccess 方法需要 event 和一个回调函数,用于在成功时执行代码。这里我们将 response 中的 statusCode 比较是否等于 200。expectFailure 方法同样需要 event 和一个回调函数,但是在错误发生时执行。

使用 invokeLambdaFunction 方法来执行 Lambda 函数。

示例

下面提供一个示例 Lambda 函数,用于演示如何测试 AWS Lambda 函数:

-- -------------------- ---- -------
--------------- - ----- ------- -- -
    ----- ---- - -----------------------
    ----- -------- - -
        ----------- ----
        ----- ----------------
            -------- ------ ---------------
        ---
    --
    ------ ---------
--

您可以将上面的 Lambda 函数拷贝到 lambda.js 文件中。接下来,创建测试脚本。需要执行以下步骤:

  1. 安装 proxyquire-stub-lambda-class

  2. 创建 test.js 文件,并在该文件中创建 TestLambdaFunction 类:

    -- -------------------- ---- -------
    ----- ------------ - ----------------------------------------
    
    ----- ------------------ ------- ------------ -
        ----- ------------- -
            ----- ----- - -
                ----- ----------------
                    ----- --------
                ---
            --
    
            -------------------------- ----- ---------- -- -
                ----- ---- - --------------------------
                ----------------------------------- ---------
            ---
    
            ----- ---------------------------------
        -
    
        ----- ---------- -
            ----- ----- - -
                ----- -------------------
            --
    
            -------------------------- ----- ---------- -- -
                ----- ---- - --------------------------
                ---------------------------------- ------ -- -- ------ ---- -- ----- --- -------
            ---
    
            ----- ---------------------------------
        -
    -

    在上述示例中,我们实现了两个测试方法:testSuccesstestFail。第一个方法测试正常的执行情况,第二个测试待处理错误的情况。

  3. 执行测试:

    这里创建一个 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

纠错
反馈