Javascript 单元测试vue.js karma(网页包)中出错:undefined不是构造函数

Javascript 单元测试vue.js karma(网页包)中出错:undefined不是构造函数,javascript,unit-testing,phantomjs,karma-runner,vuejs2,Javascript,Unit Testing,Phantomjs,Karma Runner,Vuejs2,我正在使用Vue的CLI生成的webpack模板,并尝试添加一些单元测试。已经提供了一个示例,它可以完美地工作: import Vue from 'vue' import Hello from '@/components/Hello' describe('Hello.vue', () => { it('should render correct contents', () => { const Constructor = Vue.extend(Hello) co

我正在使用Vue的CLI生成的webpack模板,并尝试添加一些单元测试。已经提供了一个示例,它可以完美地工作:

import Vue from 'vue'
import Hello from '@/components/Hello'

describe('Hello.vue', () => {
  it('should render correct contents', () => {
    const Constructor = Vue.extend(Hello)
    const vm = new Constructor().$mount()
    expect(vm.$el.querySelector('.hello h1').textContent)
      .to.equal('Welcome to Your Vue.js App')
  })
})
然后我尝试添加另一个测试,我直接从Vue的文档中复制了该测试(),但发生了一些奇怪的事情:

// Inspect the raw component options
it('has a created hook', () => {
  console.log(typeof Hello.created)
  expect(typeof Hello.created).toBe('function')
})
我得到了以下错误:

LOG LOG: 'function'
    ✗ has a created hook
    undefined is not a constructor (evaluating 'expect((0, _typeof3.default)(_Hello2.default.created)).toBe('function')')
webpack:///test/unit/specs/Hello.spec.js:16:38 <- index.js:75919:64

事实证明,该模板实际上使用chai而不是jasmine来进行单元测试

在这种情况下,

expect(typeof Hello.created).to.equal('function')

expect(Hello.created).to.be.a('function')


这两种方法都有效。

对于我来说,to.betoBe不起作用。相反,我以以下方式使用了.equal(以获取组件方法的返回):

这就是我的工作

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
  </div>
</template>

<script>
export default {
  name: 'hello',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App',
      message: 'hello!'
    }
  },
  created () {
    console.log('oh crap')
    this.message = 'bye!'
  }
}
</script>
import Vue from 'vue'
import SingleTask from '@/components/SingleTask'

describe('SingleTask.vue', () => {
   it('should return true', () => {
     const Constructor = Vue.extend(SingleTask)
     const vm = new Constructor().$mount()

     expect(vm.forUnitTest()).equal(true);
   })
})