1

处理使用Vue CLI Electron Plugin Builder创建的@vue/cli 4.2.2项目。Vue CLI 使用目录中自动生成的HtmlWebpackPlugin。相关页面的 具有自动从文件中检测页面标题的语法。index.htmlpublic</title>index.html<%= htmlWebpackPlugin.options.title %>vue.config.js

vue.config.js

module.exports = {
  pluginOptions: {
    electronBuilder: {
      chainWebpackRendererProcess: config => {
        config.plugin("html").tap(args => {
          args[0].title = "Stack Overflow";
          return args;
        });
      }
    }
  }
};

问题是,当应用程序启动时,页面标题从stackoverflow变为Stack Overflow会有一个毫秒的闪烁。为了防止这种情况,我使用了page-title-updated如下所示的 Electron 钩子来确保应用程序标题正确加载。

main.js

var win = new BrowserWindow({
  width: 800, 
  height: 600,
  title: 'Stack Overflow'
});

win.on('page-title-updated', (evt) => {
  evt.preventDefault();
});

它工作得很好,现在没有窗口闪烁,</title>但是当使用 Cypress 运行e2e测试时,它只是找不到正确的标题Stack Overflow并且测试失败。 test.js

describe("My First Test", () => {
  it("ensures the correct title", () => {
    cy.visit('/').title().should('eq', 'Stack Overflow')
  })
});

赛普拉斯测试的结果expected stackoverflow to equal Stack Overflow。所以,百万美元的问题是,我如何获得赛普拉斯测试通过?

4

1 回答 1

0

如果您通过 Vue 的脚本进行测试test:e2e,看起来测试目标是浏览器中的 Vue 应用程序,而不是电子应用程序。

当然,您可以根据这个问题在 Vue 应用程序中设置标题How can I bind the html content in vuejs(以及您的 mod 到 Electon 启动),并且您的 Electron 应用程序看起来仍然没问题。

标题.vue

<script>
  export default {
    name: 'vue-title',
    props: ['title'],
    watch: {
      title: {
        immediate: true,
        handler() {
          document.title = this.title;
        }
      }
    },
    render () {
      return null;
    },
  }
</script>

应用程序.vue

<template>
  <div id="app">
    <Title title="Stack Overflow"></Title>
    ...
  </div>
</template>

<script>
import Title from './components/Title.vue'

export default {
  name: 'App',
  components: {
    Title
  },
}
</script>

现在测试通过了,但您仍然只是在测试 Vue 代码,而不是在 Electron 中运行。

请参阅使用 Cypress 测试 Electron.js 应用程序 - alpha 版本以获取一些可能对您有所帮助的信息。

于 2020-02-15T22:20:32.530 回答