如何在React测试中加载Stripe?

Vic*_*box 5 stripe-payments reactjs

我正在测试使用Stripe的React组件,并且想知道如何构建测试?我看到此错误:

错误:请在此页面上加载Stripe.js(https://js.stripe.com/v3/)以使用react-stripe-elements。如果Stripe.js尚不可用(它正在异步加载,或者您正在使用服务器端呈现),请参见https://github.com/stripe/react-stripe-elements#advanced-integrations

生产代码非常基本:

<StripeProvider apiKey={config.stripeKey}>
    <MyCheckout />
</StripeProvider>
Run Code Online (Sandbox Code Playgroud)

测试代码也是基本的,但会导致错误。当我仅在浏览器中访问应用程序时,不会发生该错误:

  it('Should render the correct element', () => {
    let rendered = ReactTestUtils.renderIntoDocument(
      <Provider store={store}>
        <Account />
      </Provider>)
    let elem = ReactDOM.findDOMNode(rendered)
    expect(elem.tagName.toLowerCase()).to.equal('div')
  })
Run Code Online (Sandbox Code Playgroud)

Vic*_*box 0

看起来他们的高级指南回答了这个问题,他们这样做的部分是:

  componentDidMount () {
    if (window.Stripe) {
      this.setState({stripe: window.Stripe(config.stripeKey)}) // eslint-disable-line new-cap
    } else {
      document.querySelector('#stripe-js').addEventListener('load', () => {
        this.setState({stripe: window.Stripe(config.stripeKey)}) // eslint-disable-line new-cap
      })
    }
  }
Run Code Online (Sandbox Code Playgroud)

在我的测试中:

  it('Should render the correct element', () => {
    window.Stripe = function () {}
    let rendered = ReactTestUtils.renderIntoDocument(
      <Provider store={store}>
        <CartPage />
      </Provider>)
    let elem = ReactDOM.findDOMNode(rendered)
    expect(elem.tagName.toLowerCase()).to.equal('div')
  })
Run Code Online (Sandbox Code Playgroud)

测试至少可以运行。