在cypress组件测试期间如何包装vue组件?

问题描述 投票:0回答:2

我正在 Vue 上的 Cypress 中使用组件测试。 我的项目组件使用 vuetify 插件

目前,测试组件使用 Vuetify 加载:

import DebuggingTemporaryComponent from "./DebuggingTemporaryComponent"; import {mount} from "@cypress/vue"; import vuetify from '../../resources/js/vuetify' it('mounts the component with vuetify', () => { mount(DebuggingTemporaryComponent,{vuetify,}) cy.contains('Hello World') ✅ }
但是,样式无法正常运行,因为 Vuetify 组件需要在页面上至少包装一次 

<v-app>

 。  在组件测试中,这种情况不会发生。

我需要按照 React 等效文档中的建议自定义包装器。 然而,每当我尝试创建自己的函数来执行此操作时,我都会收到一条错误消息,指出不存在适当的 webpack 加载器。 Vue 加载器已经存在并正在工作。

import {mount as cypressMount} from '@cypress/vue' export function mount (component){ return cypressMount(<v-app>component</v-app>, prepareComponent(props, options)) }

任何人都可以帮助我下一步该做什么吗?
    

例如,您可以在测试中构造一个简单的包装器
vuejs2 cypress vuetify.js styles cypress-component-test-runner
2个回答
8
投票

要测试的组件 - Button.vue

<template> <v-btn color="red lighten-2" dark> Click Me </v-btn> </template>

测试

import Button from "./Button"; import {mount} from "@cypress/vue"; import vuetify from '../plugins/vuetify' import { VApp } from 'vuetify/lib/components' const WrapperComp = { template: ` <v-app> <Button /> </v-app> `, components: { VApp, Button } } it('mounts the component with vuetify', () => { mount(WrapperComp, { vuetify }) const lightRed = 'rgb(229, 115, 115)' cy.contains('button', 'Click Me') // ✅ .should('have.css', 'background-color', lightRed) // fails if no <v-app> used above })

你会得到一个错误,因为你正在尝试使用 JSX,这确实可以通过 Vue 

-1
投票

通过使用 render 函数

,无需 JSX 也可以实现相同的效果

import {mount} from "@cypress/vue"; import vuetify from '../../resources/js/vuetify' import { VApp } from 'vuetify/lib/components' function mountComponentWithVuetify(componentToMount, options = {}) { return mount({ render(h) { return h(VApp, [h(componentToMount)]) } }, { vuetify, ...options, }) }

© www.soinside.com 2019 - 2024. All rights reserved.