реагировать родной шутка макет API вызов пользовательский модуль - PullRequest
1 голос
/ 29 апреля 2020

Я новичок в Jest и только что изучил React Native Expo. У меня есть служба, которая обрабатывает вызовы API на сервер. Я хочу проверить этот сервис, издеваясь над ним. Я понятия не имею, почему это не работает. Документация Jest о насмешках для меня довольно расплывчата.

Я не понимаю, почему мой оригинальный метод не смоделирован.

Мой каталог выглядит следующим образом:

services
├── __tests__
|   └──goalService.test.js
|
├── __mocks__
│   └── goalService.tsx
|
└── goalService.tsx

goalService.tsx в root служб имеет методы, которые возвращают обещание.

Код из каждого файла:

goalService.tsx в папке mocks

// __mocks__/goalService.tsx
class GoalService {

    fakeGoals = [
        {
            "id": 1,
            "name": "Test",
            "description": "test test test",
            "user_id": 2,
            "createdAt": "2020-04-13T11:03:47.231Z",
            "updatedAt": "2020-04-13T13:28:58.305Z"
        }
    ];

    GetGoals = (userID) => {
        return new Promise((resolve, reject) => {
            resolve(this.fakeGoals);
        });
    }

    AddGoal = (newGoal) => {
        this.fakeGoals.push(newGoal);

        return new Promise((resolve, reject) => {
            resolve(this.fakeGoals);
        })
    }
}

goalService. js в папке с тестами

// __tests__/goalService.js
import GoalService from './../goalService';

jest.mock('./../goalService');

it('Fetches goals data', done => {
    return GoalService.GetGoals(2).then(data => {
        expect(data.length).toBeGreaterThan(0);
        done();
    });
});

goalService.tsx

// goalService.tsx
class GoalService {

    url = 'xxx';

    GetGoals = (userID) => {
        return fetch(this.url + 'goal/user/' + userID)
            .then((response) => { 
                return response.json();
            }).then((data) => {
              return data.reverse();
            })
            .catch((error) => {
              console.error('Error:', error);
            });
    }

    AddGoal = (newGoal) => {
        return fetch(this.url + 'goal', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(newGoal)
        }).then((response) => response.json())
            .then((data) => {
                console.log('Success:', data);
                return data;
            })
            .catch((error) => {
                console.error('Error:', error);
                return false;
            });
    }
}
...

const goalService = new GoalService();
export default goalService;

Тест выдает следующую ошибку:

TypeError: _goalService.default.GetGoals is
not a function

Как именно протестировать GetGoals и AddGoals?

Я действительно застрял здесь, пожалуйста, помогите мне.

Заранее спасибо!

...