Пересмешник, использующий шутку (без пакетов) - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь издеваться над Аксиосом, используя Jest, однако я не добился большого успеха.Я хотел бы избежать использования отдельных пакетов (jest-mock-axios), чтобы лучше познакомиться с процессом насмешек Jest.Проект сделан с самой последней версией create-реагировать-приложение (v2.1.1).Я также использую фермент для испытаний.

В настоящее время у меня проблемы с настройкой макета axios.Вот фрагмент соответствующего кода и начальный тест (логика тестирования будет обновлена, как только я смогу выяснить, в чем проблема):

App.js

import React, { Component } from 'react';
import axios from 'axios';

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      currentPhase: null,
    };
    this.hashcodeResults = '';
    this.transcriptionData = '';
    this.handleFileSelectionSubmit.bind(this);
  }

  handleFileSelectionSubmit(event) {
    event.preventDefault();
    const audioData = [];
    const targetFile = event.target[0].files;
    const fileInfo = {
      lastModifiedDate: targetFile[0].lastModifiedDate,
      name: targetFile[0].name,
      path: targetFile[0].path,
      size: targetFile[0].size,
      type: targetFile[0].type,
    };
    audioData.push(fileInfo);
    axios({
      method: 'post',
      url: `${baseUrl}/hash`,
      data: {
        audioFiles: audioData,
      },
    })
      .then((response) => {
        if (response.data.inDatabase === false) {
          this.hashcodeResults = response.data.result;
          this.setState({
            currentPhase: 'hashCodeGenerated',
          });
        } else {
          this.hashcodeResults = response.data.result;
          this.transcriptionData = response.data.transcript;
          this.setState({
            currentPhase: 'transcriptionDownloadComplete',
          });
        }
      })
      .catch((error) => {
        throw new Error('ERROR (Hashcode Generation): ', error);
      });
  }

export default App;

App.test.js:

import React from 'react';
import { shallow } from 'enzyme';
import axios from 'axios';
import App from '../App';

jest.mock('axios');

describe('Application audio file submission', () => {
  describe('Files that have not been previously transcribed', () => {
    it('Should return data', () => {
      const response = { data: true };
      axios.post.mockResolvedValue(response);
      const wrapper = shallow(<App />);
      const inst = wrapper.instance();
      const fakeEvent = {
        preventDefault: () => true,
        target: [{
          files: 'someFile',
          lastModifiedDate: 'someDate',
          name: 'someName',
          path: 'somePath',
          type: 'someType',
        }],
      };
      inst.handleFileSelectionSubmit(fakeEvent).then(res => expect(res.data).toBeDefined());
    });

  });

});

Когда я запускаю тест, я вижу ошибку "TypeError: Невозможно прочитать свойство 'then" из undefined ", иуказывает на вызов axios в функции handleFileSelectionSubmit файла App.js.

Любое руководство будет высоко ценится!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...