【问题标题】:How can i test an API call in vuejs using jest?如何使用 jest 在 vuejs 中测试 API 调用?
【发布时间】:2019-05-16 11:10:05
【问题描述】:

我在我的组件中有这个方法,它使用 axios 进行 API 调用,我查看了有关如何测试它的文档,但我似乎无法弄清楚如何去做。任何帮助将不胜感激。

loadContents() {
  axios.get('/vue_api/content/' + this.slug).then(response => {
    this.page_data = response.data.merchandising_page
  }).catch(error => {
    console.log(error)
  })
},

【问题讨论】:

标签: javascript unit-testing vue.js vuejs2 jestjs


【解决方案1】:

您可以使用moxiosaxios-mock-adapter 来自动模拟Axios 请求。对于开发人员的人体工程学,我更喜欢后者。

考虑一下这个使用 Axios 获取用户数据的 UserList 组件:

// UserList.vue
export default {
  data() {
    return {
      users: []
    };
  },
  methods: {
    async loadUsers() {
      const { data } = await axios.get("https://api/users");
      this.users = data;
    }
  }
};

使用axios-mock-adapter,相关测试将Axios GET 请求存根到API URL,而是返回模拟数据:

import axios from "axios";
const MockAdapter = require("axios-mock-adapter");
const mock = new MockAdapter(axios);

import { shallowMount } from "@vue/test-utils";
import UserList from "@/components/UserList";

describe("UserList", () => {
  afterAll(() => mock.restore());
  beforeEach(() => mock.reset());

  it("loads users", async () => {
    mock
      .onGet("https://api/users")
      .reply(200, [{ name: "foo" }, { name: "bar" }, { name: "baz" }]);

    const wrapper = shallowMount(UserList);
    await wrapper.vm.loadUsers();
    const listItems = wrapper.findAll("li");
    expect(listItems).toHaveLength(3);
  });
});

demo

【讨论】:

  • @user127 如果你想让网络调用命中服务器,那么你根本不想模拟。
猜你喜欢
  • 2020-05-29
  • 2018-09-28
  • 2019-05-14
  • 2021-12-30
  • 1970-01-01
  • 2020-09-16
  • 2020-05-08
  • 2020-12-10
  • 2022-01-19
相关资源
最近更新 更多