繁体   English   中英

开玩笑地在“this”对象上模拟一个方法

[英]Mocking a method on "this" object in jest

我有以下实现:

export const actions = {
  async submitPhoneNumber(context) {
    let data = await this.$axios.
        $get('https://jsonplaceholder.typicode.com/todos/1')
    // do something with data
    return data

  }
}

当我运行我的测试时,我得到

类型错误:无法读取未定义的属性“$get”

我如何模拟this.$axios.$get

我开玩笑地看着嘲笑global但嘲笑global只是嘲笑 window.whatever。

我需要模拟this对象。

这是我的测试:

import { actions } from '@/store/channel-add'
import flushPromises from 'flush-promises'
describe('channel-add', () => {
  it('submits phone number and returns phone code hash', async () => {
    let data = await actions.submitPhoneNumber()
    await flushPromises()

    expect(data).toBeTruthy()
  })
})

这是解决方案:

index.ts

export const actions = {
  // I don't know where you get $axios from this, you didn't give the completed code. so I made a fake one for the demo.
  $axios: {
    $get: url => ''
  },
  async submitPhoneNumber(context) {
    let data = await this.$axios.$get('https://jsonplaceholder.typicode.com/todos/1');
    // do something with data

    data = this.processData(data);
    return data;
  },

  // for demo
  processData(data) {
    return data;
  }
};

index.spec.ts

import { actions } from './';

actions.$axios = {
  $get: jest.fn()
};

describe('actions', () => {
  it('should mock action.$axios.$get method', () => {
    expect(jest.isMockFunction(actions.$axios.$get)).toBeTruthy();
  });
  it('should get data correctly', async () => {
    (actions.$axios.$get as jest.Mock<any, any>).mockResolvedValueOnce({ userId: 1 });
    const actualValue = await actions.submitPhoneNumber({});
    expect(actualValue).toEqual({ userId: 1 });
    expect(actions.$axios.$get).toBeCalledWith('https://jsonplaceholder.typicode.com/todos/1');
  });
});

单元测试结果:

 PASS  src/mock-module/axios/index.spec.ts
  actions
    ✓ should mock action.$axios.$get method (4ms)
    ✓ should get data correctly (4ms)

Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        2.181s, estimated 3s

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM