VueJs, Jest, Sinon: Как правильно выполнить модульное тестирование вложенных функций? - PullRequest
0 голосов
/ 24 сентября 2019

Поэтому я пытаюсь понять, как правильно выполнить модульное тестирование моих функций, которые вызывают в них firebase.Я хочу заглушить или шпионить за этими функциями firebase, чтобы просто увидеть, как они вызываются, но при этом не происходит фактического вызова firebase, поскольку, по моему мнению, это было бы скорее интеграционным тестом.Я не совсем знаю правильный путь для этого.

Это приложение VueJs, использующее Jest с Sinon для тестирования.

Это функция от одного из моих компонентов Vue.

-Login.Vue-

login() {
      this.performingRequest = true // initialized as false
      firebase.auth
        .signInWithEmailAndPassword(
          this.loginForm.email,
          this.loginForm.password
        )
        .then(user => {
          this.$store.commit("setCurrentUser",  user.user);
          this.$store.dispatch("fetchUserProfile");
          this.performingRequest = false
          this.$router.push("/mainPage");
        })
        .catch(err => {
          console.log(err);
          this.performingRequest = false
          this.errorMsg = err.message
        });
    },

Мой тест


describe('Login.vue', () => {

    const wrapper = shallowMount(Login);

    test('Login function works as expected', () => {

        expect(wrapper.vm.performingRequest).toBe(false); // passes

        let spy = sinon.spy(wrapper.vm.login());
        spy.call();

        expect(wrapper.vm.performingRequest).toBe(true);  // passes

        expect(spy.calledOnce).toBe(true);
        // expect(wrapper.vm.performingRequest).toBe(false);  // passes
    })
});

То, что я хочу сделать, это увидеть, что вызвана функция аутентификации firebase и что ее значения фактически изменились.

Попытка понять, на что заглянуть / шпионить, была трудной.Любая помощь в понимании этого процесса будет высоко ценится, потому что у меня есть намного больше этого приложения для тестирования: D

Спасибо за вашу помощь в продвинутом и дайте мне знать, если мне нужно предоставить больше информации для ясности ради.

Тем временем я буду исследовать :)

РЕДАКТИРОВАТЬ:

Кажется, это была просто ошибка пользователя с моей стороны.Надеюсь, это кому-нибудь поможет!

Это помогло -

 const stub = sinon.stub(fb.auth, 'signInWithEmailAndPassword').resolves('returning promise');
...