question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Documentation for testing a component without resolving sub-components

See original GitHub issue

What problem does this feature solve?

Intro

Assume that there are two components, <x-icon> and <x-checkbox>.

The <x-icon> component is for showing a font icon given by face="..." attributes like

<x-icon face="error"/>              <!-- It shows an error icon -->
<x-icon face="checkbox-empty"/>     <!-- It shows a checkbox empty icon -->
<x-icon face="checkbox-checked"/>   <!-- It shows a checkbox checked icon -->

And <x-checkbox> uses <x-icon> with face attribute like

<div class="checkbox">
    <x-icon :face="face"/>  <!-- 'face' attributes are internal and linked to 'checked' attribute -->
    <input v-model="checked" type="checkbox">
</div>

So the final HTML will be one of the followings (without resolving <x-icon>)

<div class="checkbox">
    <x-icon face="checkbox-empty"/>
    <input  type="checkbox">
</div>

<!-- or -->

<div class="checkbox">
    <x-icon face="checkbox-checked"/>
    <input type="checkbox" checked>
</div>

What I would like to do

I would like to test <x-checkbox> component without understanding an implementation of the <x-icon>. For example, I would like to check

  1. Is initial HTML shows <x-icon face="checkbox-empty">
  2. Is HTML shows <x-icon face="checkbox-checked"> after <x-checkbox> has clicked.

For this purpose, I cannot use stubs: { 'x-icon': true } while

  1. x-icon is defined in components attributes of x-checkbox component and in this case, stubs seems ignored.
  2. stubs creates an empty comment so I cannot check if the component is x-icon or not
  3. stubs removes attributes even I uses stubs: { 'x-icon': SomeThing } so I cannot check if the component attributes of x-icon has correctly changed

What does the proposed API look like?

I’m not really proposing but currently, I use a wrapper function to

  1. Overwrite localVue.config.isUnknownElement function to allow elements in components
  2. Remove components to prevent element resolving

like

import { mount as mountBase } from '@vue/test-utils';

const original = Vue.config.isUnknownElement;

export function mount(component: any, options: any= {}) {
  const localVue = options.localVue || createLocalVue();
  if (!!component.options && !!component.options.components) {
    const ignoredElements = Object.keys(component.options.components);
    Vue.config.isUnknownElement = (tag: string): boolean => {
      if (ignoredElements.includes(tag)) {
        return false;
      }
      return original(tag);
    }
    component.options.components = {};
  }
  return mountBase(component, {
    ...options,
    localVue,
  });
}

Is this a correct way?

Issue Analytics

  • State:closed
  • Created 5 years ago
  • Reactions:2
  • Comments:8 (4 by maintainers)

github_iconTop GitHub Comments

1reaction
eddyerburghcommented, May 20, 2018

I’m closing this issue as it’s not clear to me what the intention is.

The original issue is a feature request. We have recently changed stubs to render the component name, which I believe satisfied your use case. If you would like a different feature, please create a new issue with a proposal.

If you would like to report a bug, like you mentioned in your other components, please create an issue with a reproduction.

1reaction
lambdalisuecommented, Mar 29, 2018

@ilyaztsv I’ve tried that one several days ago and it did not work in my environment so I ended up. Today I fixed that function (commented on #410) and that works perfectly. Thanks for pointing me a correct direction 👍

Read more comments on GitHub >

github_iconTop Results From Across the Web

Component Testing Tutorial: A Comprehensive Guide With ...
Component testing is a subset of software testing that involves validating every component of software applications independently without merging them.
Read more >
Component testing scenarios - Angular
The purpose of the spec is to test the component, not the service, and real services can be trouble.
Read more >
Testing parent and child components separately #167 - GitHub
I can re-factor my component without my tests failing and requiring re-writes; If the API of my child component changes the tests will...
Read more >
How YOU can use React Testing Library to test component ...
Asynchronous tests and working with input ... We have so far shown you how to render a component, find the resulting elements, and...
Read more >
angular2 test, how do I mock sub component - Stack Overflow
First we'll define a mock directive for our sub component (same selector): ... .io/docs/ts/latest/api/testing/TestComponentBuilder-class.html.
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found