我有一个登录过程,在向服务器发送请求并获得响应后,我会执行以下操作:

 this.$auth.setToken(response.data.token);
 this.$store.dispatch("setLoggedUser", {
     username: this.form.username
 });

现在我想在使用cypress进行测试时模拟这种行为,所以我不需要每次运行测试时都实际登录.

所以我创建了一个命令:

Cypress.Commands.add("login", () => {
  cy
    .request({
      method: "POST",
      url: "http://localhost:8081/api/v1/login",
      body: {},
      headers: {
        Authorization: "Basic " + btoa("administrator:12345678")
      }
    })
    .then(resp => {
      window.localStorage.setItem("aq-username", "administrator");
    });

});

但我不知道如何模仿"setLoggedUser"的动作,知道吗?

推荐答案

在创建vuex store的应用程序代码中,可以有条件地将其公开给Cypress:

const store = new Vuex.Store({...})

// Cypress automatically sets window.Cypress by default
if (window.Cypress) {
  window.__store__ = store
}

然后在Cypress测试代码中:

cy.visit()
// wait for the store to initialize
cy.window().should('have.property', '__store__')

cy.window().then( win => {
  win.__store__.dispatch('myaction')
})

您可以将其作为另一个自定义命令添加,但如果不是这样,vuex存储将不存在.

Vue.js相关问答推荐

vuejs:在确认提示之前更改 HTML

保持页面重新加载之间的状态

Vuejs 通过数据键迭代复杂对象

Vue 和 Nuxt 之间生命周期钩子的不同行为

如何对将 DOM 元素附加到 HTML 正文的 Vue 组件进行单元测试?

使用 vuex 更新数据

在 vuejs 中的图像中包含 router-link 标记

v-on:submit.prevent 不停止表单提交

未捕获的类型错误:c.querySelectorAll 不是函数

Vuejs:我应该在 vue-router SPA 中的哪里放置一些常用的 js 工具?

在组件之间共享数据

带有后退按钮的 Vue.js 路由

Vue.js webpack:如何获取目录中的文件列表?

vue-router如何持久化导航栏?

在vue中单击时如何模糊元素

升级到 vue-cli 3 后,HTML 中的空格消失了

如何访问通用 javascript 模块中的当前路由元字段

在 Vuex 模块中进行继承的方法

VueJS 按键查找元素

如何删除 vue cli 2?