VueJs,Jest和Sinon:如何正确对嵌套函数进行单元测试?

时间:2019-09-24 20:00:42

标签: unit-testing vue.js jestjs sinon

所以我试图了解如何正确地对调用其中的firebase的函数进行单元测试。我想对这些Firebase函数进行存根或监视,以查看它们是否已被调用,但不进行实际的Firebase调用,因为据我所知,这更多的是集成测试。我不太清楚解决这个问题的正确方法。

这是一个使用Jest和Sinon进行测试的VueJs应用程序。

这是我的Vue组件之一的功能。

min_comp_offer

我的测试

-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
        });
    },

我想做的是看到firebase auth函数被调用,并且其作用值实际上被更改了。

试图了解要进行打桩/间谍的内容非常困难。我们将非常感谢您对该应用程序进行更多的测试:D

感谢您的高级帮助,如果需要澄清,请告诉我。

与此同时,我将进行研究:)

编辑:

似乎这只是我的用户错误。希望这可以帮助某人!

这成功了-


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
    })
});

0 个答案:

没有答案