0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Git管理しているCF2の関数をJestでテストする

Posted at

結論

rewire という package を使うと module.exports していない関数を Jest でテストできます。
https://github.com/jhnns/rewire

背景

CF2 の関数を Git 管理しています。
その関数を Jest でテストしたいと思いましたが、CF2 では module.exports が使えません。
よって module.exports をせずに、Jest でテストを書く方法が知りたいと思いました。

前提

この記事では、例として下記の関数を想定します。

index.js
function handler(event) {
  var response = event.response;
  var headers = response.headers;

  if (!headers["access-control-allow-origin"]) {
    headers["access-control-allow-origin"] = { value: "*" };
  }

  return response;
}

方法

まず rewire を install します。

$ npm install -D rewire

続いて rewire を使ってテストを書きます。

index.spec.js
const rewire = require("rewire");
const handler = rewire("../path/to/index.js").__get__("handler");

describe("handler", () => {
  describe("access-control-allow-origin に値が設定されている場合", () => {
    test("何もしない", () => {
      const event = {
        response: {
          headers: {
            "access-control-allow-origin": "https://example.com",
          },
        },
      };

      expect(
        handler(event).headers["access-control-allow-origin"].value.toMatch(
          "https://example.com"
        )
      );
    });
  });

  describe("access-control-allow-origin に値が設定されていない場合", () => {
    test("'*'を設定する", () => {
      const event = {
        response: {
          headers: {
            "access-control-allow-origin": "",
          },
        },
      };

      expect(
        handler(event).headers["access-control-allow-origin"].value.toMatch("*")
      );
    });
  });
});

下記の内容さえ書いてしまえば、通常の方法と同様にテストを書くことができます。

const rewire = require("rewire");
const handler = rewire("../path/to/index.js").__get__("handler");

通常の方法との差分

- const handler = require("../path/to/index.js")
+ const rewire = require("rewire");
+ const handler = rewire("../path/to/index.js").__get__("handler");

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?