Javascript 单元测试vue.js karma(网页包)中出错:undefined不是构造函数
我正在使用Vue的CLI生成的webpack模板,并尝试添加一些单元测试。已经提供了一个示例,它可以完美地工作: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
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.be或toBe不起作用。相反,我以以下方式使用了.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);
})
})