Я новичок в тестировании, и у меня есть несколько вопросов по поводу насмешливого API и экземпляра ax ios с классом ES6.
У меня есть index.js
:
import axios from 'axios';
export default class Pushkin {
constructor() {
this.con = undefined;
}
connect(quizAPIUrl) {
this.con = axios.create({
baseURL: quizAPIUrl,
});
}
prepExperimentRun(userID) {
const postData = {
user_id: userID,
};
return this.con.post('/startExperiment', postData);
}
// ......
}
Я попробовал несколько способов проверить это:
import axios from 'axios';
import Pushkin from '../src/index';
jest.mock('axios');
const quizURL = './api/quiz';
axios.create.mockImplementation(() => Promise.resolve(quizURL));
const pushkinClient = new Pushkin();
test('connect to quiz api url', () => {
pushkinClient.connect(quizURL);
// Pushkin { con: Promise { './api/quiz' } }
pushkinClient.con.then((data) => expect(data).toEqual(quizURL));
});
test('prepExp', () => {
const postData = { data: [{ user_id: 123456 }] };
axios.post.mockImplementation(() => Promise.resolve(postData));
pushkinClient.prepExperimentRun(123456).then((data) => expect(data).toBe(postData));
});
Когда я запускаю второй тест prepExp
, выдается ошибка TypeError: this.con.post is not a function
. И this.con
- это Promise { './api/quiz' }
.
Как я должен насмехаться над quizAPIurl
in connect(quizAPIurl)
вместо простого его кодирования? После этого, как правильно смоделировать экземпляр ax ios и проверить POST-запросы? Спасибо.