Mock api来自Storybook

Ala*_* P. 7 mocking reactjs axios storybook axios-mock-adapter

是否axios-mock-adapter只与提出的要求的工作axios

我编写了一个POST到API的组件(使用vanilla XHR,而不是axios).我在Storybook中测试它并希望拦截那些POST请求,因为端点还不存在:

import React from "react"
import { storiesOf } from "@kadira/storybook"
import MyComponent from "./MyComponent"
import axios from "axios"
import MockAdapter from "axios-mock-adapter"

var mock = new MockAdapter(axios)

storiesOf("My Component", module).addWithInfo(
  "Simulator",
  () => {
    mock.onPost().reply(500)
    return <MyComponent />
  },
  {}
)
Run Code Online (Sandbox Code Playgroud)

我的组件仍然试图命中API端点,我得到404响应 - 而不是预期的500响应.

是否axios-mock-adapter只与提出的要求的工作axios?是否mock调用都在里面MyComponent

谢谢.

小智 5

xhr-mock 应该适用于您可能不想通过互联网发出请求的本地测试。

在测试之外,如果您正在等待构建真正的端点,您可以在开发中使用 Mock/it ( https://mockit.io )。您可以声明自己的专用子域,并稍后将其替换为真正的子域。免责声明:这是我最近发布的一个副项目,希望得到任何反馈!


mic*_*gej 2

您可以使用 xhr-mock 而不是 axios-mock-adapter。

用于模拟 XMLHttpRequest 的实用程序。

非常适合测试。非常适合在后端仍在构建时进行原型设计。

适用于 NodeJS 和浏览器。与 Axios、jQuery、Superagent > 以及可能所有其他基于 XMLHttpRequest 构建的库兼容

import mock from 'xhr-mock';

storiesOf("My Component", module).addWithInfo("Simulator",
() => {

    mock.post('', {
      status: 500,
      body: '{}'
    });

    return <MyComponent />
    },
    {}
)
Run Code Online (Sandbox Code Playgroud)

另外,您需要在storybook的preview-head.html文件中添加jquery脚本

1)https://www.npmjs.com/package/xhr-mock