Skip to content

Commit eb0064f

Browse files
author
Emma Genesen
committed
feat: add unit render test for every element in component
1 parent 757cb3e commit eb0064f

File tree

2 files changed

+40
-8
lines changed

2 files changed

+40
-8
lines changed

src/components/composables/useExportComponent.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@ export function useExportComponent() {
99
*
1010
*/
1111

12-
const showExportComponentDialog = () => {
13-
ipcRenderer
14-
.invoke("exportComponent", {
12+
const exportComponent = () => {
13+
ipcRenderer.invoke("exportComponent", {
1514
title: "Choose location to save folder in",
1615
message: "Choose location to save folder in",
1716
nameFieldLabel: "Component Name",
@@ -356,5 +355,5 @@ z-index: ${html.z};
356355
this.componentMap[this.activeComponent].children
357356
);
358357
}
359-
showExportComponentDialog();
358+
exportComponent();
360359
}

src/components/nav-buttons/ExportMenu.vue

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { mapState } from "vuex";
2323
const { fs, ipcRenderer } = window;
2424
2525
import writeNested from "../../mixins/writeNested";
26+
import { result } from "lodash";
2627
2728
2829
export default {
@@ -104,7 +105,33 @@ export default {
104105
* @description: creates component code <template>, <script>, <style>
105106
* invokes writeTemplate, writeScript, writeStyle
106107
*/
107-
createComponentCode(componentLocation, componentName, children, routes) {
108+
109+
writeRenderUnitTestString(componentName, htmlList) {
110+
111+
const imports = `import { mount } from '@vue/test-utils'
112+
import ${componentName} from '../src/components/${componentName}.vue'`
113+
const results = [imports];
114+
115+
for (const el of htmlList) {
116+
const test = `
117+
test('renders ${componentName}', () => {
118+
const wrapper = mount(${componentName})
119+
120+
const ele = wrapper.get('[data-test="${componentName}-${el.text}-${el.id}"]')
121+
122+
expect(ele.exists()).toBe(true)
123+
})`
124+
results.push(test);
125+
}
126+
127+
return results.reduce((acc, ele) => acc += ele, '');
128+
},
129+
130+
createComponentTestCode(componentLocation, componentName, componentMap) {
131+
fs.writeFileSync(componentLocation, this.writeRenderUnitTestString(componentName, componentMap[componentName].htmlList))
132+
},
133+
134+
createComponentCode(componentLocation, componentName, children) {
108135
if (componentName === "App") {
109136
fs.writeFileSync(
110137
componentLocation + ".vue",
@@ -205,12 +232,13 @@ export default {
205232
let htmlArr = this.componentMap[componentName].htmlList;
206233
let outputStr = ``;
207234
// eslint-disable-next-line no-unused-vars
208-
for (let el of htmlArr) {
235+
for (let i = 0; i < htmlArr.length; i++) {
236+
const el = htmlArr[i];
209237
if (!el.text) {
210-
outputStr += ` <${el}/>\n`;
238+
outputStr += ` <${el} [data-test=${componentName}-${el}-${i}] />\n`;
211239
} else {
212240
outputStr += ` `;
213-
outputStr += htmlElementMap[el.text][0]
241+
outputStr += htmlElementMap[el.text][0] + `[data-test=${componentName}-${el.text}-${el.id}]`
214242
//if conditional to check class
215243
if (el.class !== "") {
216244
outputStr += " " + "class = " + `"${el.class}"`;
@@ -806,6 +834,8 @@ export default {
806834
fs.mkdirSync(path.join(data, "src", "views"));
807835
fs.mkdirSync(path.join(data, "src", "router"));
808836
fs.mkdirSync(path.join(data, "src", "store"));
837+
fs.mkdirSync(path.join(data, "test"));
838+
fs.mkdirSync(path.join(data, "test", "components"));
809839
}
810840
// creating basic boilerplate for vue app
811841
this.createIndexFile(data);
@@ -848,6 +878,9 @@ export default {
848878
componentName,
849879
this.componentMap
850880
);
881+
this.createComponentTestCode(path.join(data, "test", "components", componentName + '.test.js'),
882+
componentName,
883+
this.componentMap)
851884
}
852885
// if componentName is App
853886
} else {

0 commit comments

Comments
 (0)