开玩笑的模拟条纹

时间:2019-04-04 17:12:23

标签: node.js jestjs stripe-payments

我想在Jest中模拟节点Stripe SDK,因为我不想从Stripe运行模拟API服务器,但是我不知道如何去做。我正在创建一个__mocks__目录并添加stripe.js,但是我无法导出任何内容。

我通常在致电TypeError: Cannot read property 'create' of undefined时得到strypegw.charges.create()。我使用的是ES6模块语法,所以我import stripe from 'stripe'

3 个答案:

答案 0 :(得分:0)

这是一个简单的解决方案:

jest.mock("stripe", () => {
  return jest.fn().mockImplementation(() => {
    return {
      charges: {
        create: () => "fake stripe response",
      },
    };
  });
});

我在有关ES6 Class Mocks的笑话文档中找到了它

答案 1 :(得分:0)

--default-authentication-plugin=mysql_native_password

答案 2 :(得分:0)

将其添加到帮助函数中,并在必要的安装文件或测试顶部调用它。

// Mocking Stripe object
  const elementMock = {
    mount: jest.fn(),
    destroy: jest.fn(),
    on: jest.fn(),
    update: jest.fn(),
  };

  const elementsMock = {
    create: jest.fn().mockReturnValue(elementMock),
  };

  const stripeMock = {
    elements: jest.fn().mockReturnValue(elementsMock),
    createToken: jest.fn(() => Promise.resolve()),
    createSource: jest.fn(() => Promise.resolve()),
  };

  // Set the global Stripe
  window.Stripe = jest.fn().mockReturnValue(stripeMock);

通过这种方法,您也可以轻松测试与条带相关的代码

// Ex. of a token successfully created mock
  stripeMock.createToken.mockResolvedValue({
    token: {
      id: 'test_id',
    },
  });

  // Ex. of a failure mock
  stripeMock.createToken.mockResolvedValue({
    error: {
      code: 'incomplete_number',
      message: 'Your card number is incomplete.',
      type: 'validation_error',
    },
  });