Как мне написать модульный тест для внешнего сервиса JavaScript, который использует обещание с Karma, Mocha и Sinon

Я пытаюсь протестировать некоторые сервисы, которые я пишу, которые взаимодействуют со сторонним API, и задаюсь вопросом, как их протестировать эффективно.

У меня есть следующий метод:

    function getMemberProfile(memberId) {

        //Make sure memberId is defined and that it is a number
        if (!isNaN(memberId)) {
            return Client.authorizedApiRequest('/members/' + memberId).get();
        }
        return Promise.reject(new Error('Proper memberId was not supplied'));
    }

Когда Client.authorizedApiRequest('/members/' + memberId).get() вызывает сторонний API и возвращает Promise, который разрешается в некоторый объект (то есть {id:12,name:'John Doe'}).

Итак, как мне проверить функцию getMemberProfile? Я думал о том, чтобы макетировать Client.authorizedApiRequest("некоторые параметры"). Get () с помощью sinon, но я не могу заставить его работать.

Спасибо

1 ответ

Решение

ОК, все заработало. Сначала вам нужно установить чай. Затем в вашем spec-файле:

beforeEach(function () {
    fakeMember = {
        member: {
            id: 10002,
            first_name: 'John',
            last_name: 'Doe'
        }
    };
});

it('should get a member\'s profile by memberId', function () {

        //mock
        sinon.stub(Client, 'authorizedApiRequest').withArgs('/members/' + fakeMember.member.id).returns({
            get: function () {
                return Promise.resolve(fakeMember);
            }
        });

        return Members.getMemberProfile(fakeMember.member.id).then(function (response) {
            expect(response).to.have.property('member');
            expect(response.member).to.have.property('id', fakeMember.member.id);
            expect(response.member).to.have.property('first_name', fakeMember.member.first_name);
            expect(response.member).to.have.property('last_name', fakeMember.member.last_name);
        });

});
Другие вопросы по тегам