我很困惑为一个简单的登录组件编写单元测试规范,如下所示:

登录

<script>
export default {
  data () {
    return {
      email: '',
      password: ''
    }
  },
  methods: {
    async login () {
      this.$store.dispatch('login', {data: {email: this.email, password: this.password}})
    }
  }
}
</script>

Vuex auth模块操作和axios调用

const actions = {
  login (context, payload) {
    AuthService.login(payload.data).then((response) => {
      if (!response.data.success) {
        context.commit('flash', {message: response.data.message, variant: 'danger'})
      } else {
        context.commit('isAuthenticated', {isAuthenticated: true})
        router.push({name: 'dashboard'})
        context.commit('flash', {message: response.data.message, variant: 'success'})
      }
    })
  },

 ...
}

我要测试的是Login组件的 login 函数,这样:

  • 当用户在登录按钮操作上传递有效凭据时

  • vuex.store login 动作被调用

  • 反过来调用axios方法

  • 我们得到了一些数据的200响应

  • 我们将用户重定向到仪表板

  • set vuex is_authenticated = true

  • 当用户在登录按钮操作上传递无效凭据时

  • vuex.store login 动作被调用

  • 反过来调用axios方法

  • 我们得到一些数据的401响应

  • 我们使用flash-component闪烁消息

由于代码可见,功能分为不同的范围,例如从Login组件到vuex,然后是axios .

我的问题是在为上述组件编写单元测试时应该停止的地方?如果我不停止在Login组件并开始模拟vuex和axios我觉得我测试太多,否则我觉得我没有测试任何东西,因为vuex和axios中的大多数代码都相关 .

我看到的这类代码的另一个问题是功能分布在不同的组件(vuex,axios)而不是单个组件,即Login . 请建议任何重构,以使代码更易于维护/测试,并减少单元测试耦合 .