Próbowałem kpić z funkcji asynchronizacji w Jest, używam MockResolvedValue, jak pokazano w dokumentacji. Ale utknąłem z problemem tylko do odczytu, w którym moja funkcja MOCK jest importowana z miejsca gdzie indziej, mój kod jak poniżej:

//index.js 
async function getUser(id) { 
    const user = await axios.get('./user') 
    return user
}
module.exports = {
    getUser
}
//index.spec.js
import { getUser } from './index.js';

it('test getUser', async () => {
    const expectedUser = [
        {
        id: '1',
        name: 'Alice',
        },
    ];

    getUser = jest.fn().mockResolvedValue(expectedResult); //error of getUser is read-only
    const result = await getUser();
    expect(result).toEqual(expectedResult);
})
0
Ambrose 16 październik 2020, 10:49

1 odpowiedź

Najlepsza odpowiedź

Jeśli chcesz przetestować funkcję getUser, powinieneś kpić z metody axios.get i jego zwracana wartość. Użyj JET.Mock (Modulename, factory, opcje) Metoda Mock axios Ręcznie ręcznie.

Na przykład.

index.js:

const axios = require('axios');

async function getUser(id) {
  const user = await axios.get('./user');
  return user;
}
module.exports = {
  getUser,
};

index.spec.js:

import axios from 'axios';
import { getUser } from './';

jest.mock('axios', () => {
  return { get: jest.fn() };
});
describe('64385009', () => {
  it('test getUser', async () => {
    const expectedUser = [{ id: '1', name: 'Alice' }];
    axios.get.mockResolvedValueOnce(expectedUser);
    const result = await getUser();
    expect(result).toEqual(expectedUser);
    expect(axios.get).toBeCalledWith('./user');
  });
});

Wynik testu jednostkowego:

 PASS  src/stackoverflow/64385009/index.spec.js
  ✓ test getUser (6ms)

----------|----------|----------|----------|----------|-------------------|
File      |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files |      100 |      100 |      100 |      100 |                   |
 index.js |      100 |      100 |      100 |      100 |                   |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        5.27s, estimated 12s
0
slideshowp2 16 październik 2020, 09:42