programing

Mocha를 사용한 Vuejs 테스트: 컴포넌트가 요소에 장착되지 않음

newsource 2022. 8. 15. 21:18

Mocha를 사용한 Vuejs 테스트: 컴포넌트가 요소에 장착되지 않음

저는 VueJ를 사용하여 개발하거나 Mocha를 사용하여 테스트하는 것을 비교적 처음이며(머리 없이 사용) 모든 것을 이해하기 위해 일부러 vue-cli를 사용하지 않습니다.DOM에서 확인해야 할 정도까지 기능하는 유닛 테스트(페치 요구, 소품 가져오기/설정 등)가 있습니다.컴포넌트가 정상적으로 작성되고 있는 것처럼 보이지만 요소에 마운트되어 있지 않습니다.

JSDom을 사용하여 헤드리스 테스트용 DOM 콘텍스트를 만들고 있습니다(내 _setup.js:

global.Vue = require('vue/dist/vue');
require('jsdom-global')('<html><head></head><body><main id="MyApp"></main></body>');

이러한 경우 $el은 정의되지 않습니다.단, 위에서 정의한 DOM 요소를 찾을 수 있습니다.

app.spec.syslog

import assert from 'assert';
import app    from '../src/js/app.vue';

describe('app.vue', function() {
  describe('#created', function() {
    it('should initialize the application', function() {  
      const vEl = document.getElementById('MyApp');
      const vm = new Vue({el: vEl}).$mount();

      console.log(vEl);    // HTMLElement {}
      console.log(vm.$el); // undefined

      assert(true); // pass anyway for now
    });
  });
});

myComp.spec.js:

import assert from 'assert';
import header from '../src/js/components/myComp.vue';

describe('myComp.vue', function() {
  describe('#created', function() {
    it('should initialize the component', function() {
      const Constructor = Vue.extend(myComp);
      const comp = new Constructor({
        propsData: {
          someProp: 'hello world'
        }
      }).$mount();

      console.log(document.getElementById('MyApp')); // HTMLElement {}
      console.log(comp.$el)                          // undefined

      assert(true);
    });
  });
});

요소의 ID를 getElementById 실행 시 존재하지 않는 것으로 변경하면 다음 오류가 발생한다는 점에 유의하십시오.이것은 올바른 ID를 사용할 때 요소에 대한 핸들이 있음을 의미합니다.

// document.getElementById(')IDont Exist' ;
[Vue warn] :구성 요소를 마운트하지 못했습니다. 템플릿 또는 렌더링 함수가 정의되지 않았습니다.

vue-cli를 사용하지 않고 베어본 방식을 사용하므로 구성 요소 정의는 조금 다릅니다.예(간단함을 위해 생략된 일부 코드):

app.vue

import myComp from './components/myComp.vue';

let app = new Vue({
  el: '#MyApp',
  data: {
    someProp: 'hello world'
  },
  created: function() {},
  methods: {}
});

export {app};

myComp.vue

export default Vue.component('my-comp', {
  props: ['someProp'],
  data: function() {},
  created: {},
  watch: {},
  methods: {},
  template: `<div>{{someProp}}</div>`
});

컴포넌트를 DOM에 접속하는 방법이나 컴포넌트에 접속하는 방법에 대해 매우 간단한 것을 간과하고 있는 것 같습니다(단, 문서와 일치하고 있는 것 같습니다.좋은 생각 있어요?

언급URL : https://stackoverflow.com/questions/44443628/vuejs-testing-with-mocha-component-not-mounting-to-element