Skip to content

Commit 0cb06bf

Browse files
authored
feat(render): add render method (#477)
1 parent 073755b commit 0cb06bf

File tree

10 files changed

+238
-21
lines changed

10 files changed

+238
-21
lines changed

flow/modules.flow.js

+4
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,7 @@ declare module 'vue-template-compiler' {
1919
declare module 'vue-server-renderer' {
2020
declare module.exports: any;
2121
}
22+
23+
declare module 'cheerio' {
24+
declare module.exports: any;
25+
}

packages/server-test-utils/package.json

+4-2
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,17 @@
2323
},
2424
"homepage": "https://github.com/vuejs/vue-test-utils#readme",
2525
"dependencies": {
26-
"@vue/test-utils": "^1.0.0-beta.12"
26+
"@vue/test-utils": "^1.0.0-beta.12",
27+
"cheerio": "0.22.0"
2728
},
2829
"devDependencies": {
2930
"chalk": "^2.1.0",
3031
"conventional-changelog": "^1.1.3",
31-
"rollup": "^0.56.3",
32+
"rollup": "^0.57.1",
3233
"rollup-plugin-buble": "^0.19.2",
3334
"rollup-plugin-commonjs": "^8.3.0",
3435
"rollup-plugin-flow-no-whitespace": "^1.0.0",
36+
"rollup-plugin-json": "^2.3.0",
3537
"rollup-plugin-node-resolve": "^3.0.3",
3638
"typescript": "^2.6.2"
3739
},

packages/server-test-utils/scripts/build.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const buble = require('rollup-plugin-buble')
55
const nodeResolve = require('rollup-plugin-node-resolve')
66
const commonjs = require('rollup-plugin-commonjs')
77
const chalk = require('chalk')
8+
const json = require('rollup-plugin-json')
89

910
function success (text) {
1011
console.log(chalk.green(`${text} ✔`))
@@ -34,9 +35,10 @@ const rollupOptions = process.env.NODE_ENV === 'test' ? rollupOptionsTest : roll
3435
rollupOptions.forEach(options => {
3536
rollup({
3637
input: resolve('src/index.js'),
37-
external: ['vue', 'vue-template-compiler', 'vue-server-renderer'],
38+
external: ['vue', 'vue-template-compiler', 'vue-server-renderer', 'cheerio'],
3839
plugins: [
3940
flow(),
41+
json(),
4042
buble({
4143
objectAssign: 'Object.assign'
4244
}),
+3-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import renderToString from './renderToString'
2+
import render from './render'
23
import config from './config'
34

45
export default {
56
renderToString,
6-
config
7+
config,
8+
render
79
}
+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// @flow
2+
3+
import renderToString from './renderToString'
4+
import cheerio from 'cheerio'
5+
6+
export default function render (component: Component, options: Options = {}): string {
7+
const renderedString = renderToString(component, options)
8+
return cheerio.load('')(renderedString)
9+
}

packages/server-test-utils/types/tsconfig.json

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"compilerOptions": {
3+
"lib": ["es2015", "es2017", "dom"],
34
"module": "es2015",
45
"moduleResolution": "node",
56
"strict": true,

packages/test-utils/types/tsconfig.json

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"compilerOptions": {
3+
"lib": ["es2015", "es2017", "dom"],
34
"module": "es2015",
45
"moduleResolution": "node",
56
"strict": true,

test/specs/render.spec.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { render } from '~vue/server-test-utils'
2+
3+
describe('render', () => {
4+
it('returns a cheerio wrapper of the rendered component', () => {
5+
const TestComponent = {
6+
template: '<div><h2>Test</h2><p></p><p></p></div>'
7+
}
8+
const wrapper = render(TestComponent)
9+
expect(wrapper.find('h2').text()).to.equal('Test')
10+
expect(wrapper.find('p').length).to.equal(2)
11+
})
12+
})

test/specs/renderToString.spec.js

+15-15
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
// import { renderToString } from '~vue/test-utils'
2-
// import Component from '~resources/components/component.vue'
3-
// import {
4-
// isRunningJSDOM,
5-
// itDoNotRunIf
6-
// } from '~resources/utils'
7-
//
8-
// describe('renderToString', () => {
9-
// itDoNotRunIf(isRunningJSDOM,
10-
// 'throws error when not run in node', () => {
11-
// const fn = () => renderToString(Component)
12-
// const message = '[vue-test-utils]: renderToString must be run in node. It cannot be run in a browser'
13-
// expect(fn).to.throw().with.property('message', message)
14-
// })
15-
// })
1+
import { renderToString } from '~vue/server-test-utils'
2+
import Component from '~resources/components/component.vue'
3+
import {
4+
isRunningJSDOM,
5+
itDoNotRunIf
6+
} from '~resources/utils'
7+
8+
describe.skip('renderToString', () => {
9+
itDoNotRunIf(isRunningJSDOM,
10+
'throws error when not run in node', () => {
11+
const fn = () => renderToString(Component)
12+
const message = '[vue-test-utils]: renderToString must be run in node. It cannot be run in a browser'
13+
expect(fn).to.throw().with.property('message', message)
14+
})
15+
})

0 commit comments

Comments
 (0)