diff --git a/packages/create-instance/create-component-stubs.js b/packages/create-instance/create-component-stubs.js
index b82addd99..a831c3e05 100644
--- a/packages/create-instance/create-component-stubs.js
+++ b/packages/create-instance/create-component-stubs.js
@@ -60,10 +60,25 @@ function getCoreProperties(componentOptions: Component): Object {
}
function createClassString(staticClass, dynamicClass) {
- if (staticClass && dynamicClass) {
- return staticClass + ' ' + dynamicClass
+ // :class="someComputedObject" can return a string, object or undefined
+ // if it is a string, we don't need to do anything special.
+ let evaluatedDynamicClass = dynamicClass
+
+ // if it is an object, eg { 'foo': true }, we need to evaluate it.
+ // see https://github.com/vuejs/vue-test-utils/issues/1474 for more context.
+ if (typeof dynamicClass === 'object') {
+ evaluatedDynamicClass = Object.keys(dynamicClass).reduce((acc, key) => {
+ if (dynamicClass[key]) {
+ return acc + ' ' + key
+ }
+ return acc
+ }, '')
+ }
+
+ if (staticClass && evaluatedDynamicClass) {
+ return staticClass + ' ' + evaluatedDynamicClass
}
- return staticClass || dynamicClass
+ return staticClass || evaluatedDynamicClass
}
function resolveOptions(component, _Vue) {
diff --git a/test/resources/components/component-with-functional-child.vue b/test/resources/components/component-with-functional-child.vue
new file mode 100644
index 000000000..5d18f7272
--- /dev/null
+++ b/test/resources/components/component-with-functional-child.vue
@@ -0,0 +1,22 @@
+
+