鍍金池/ 問(wèn)答/網(wǎng)絡(luò)安全  HTML/ 關(guān)于vue單元測(cè)試,js函數(shù)測(cè)試的問(wèn)題,提示expect不是一個(gè)函數(shù)。

關(guān)于vue單元測(cè)試,js函數(shù)測(cè)試的問(wèn)題,提示expect不是一個(gè)函數(shù)。

我在做vue單元測(cè)試,項(xiàng)目都運(yùn)行起來(lái)了,下面的組件測(cè)試斷言能通過(guò)。
Hello.vue的測(cè)試文件

/* Hello.spec.js */

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

// 掛載元素并返回已渲染的文本的工具函數(shù)
function getRenderedText(Component, propsData) {
  const Ctor = Vue.extend(Component)
  const vm = new Ctor({ propsData: propsData }).$mount()
  return vm.$el.textContent
}

describe('Hello.vue', () => {
  it('should render correct contents', () => {
    const Constructor = Vue.extend(loading)
    const vm = new Constructor().$mount()
    Vue.nextTick(() => {
      expect(vm.$el.querySelector('.loading-container h1').textContent).to.be('hello vue!')
    });
  })
})

測(cè)試結(jié)果

Hello.vue
    ? should render correct contents

但是我現(xiàn)在要測(cè)試 src/assets/js/utils.js里的工具函數(shù)。

/* utils.js */
export const currency = (value, currency, decimals) => {
   ...
}

我創(chuàng)建了相對(duì)應(yīng)的測(cè)試文件:

/* utils.spec.js */
import Vue from 'vue'
import * as utils from '@/assets/js/utils.js'

// 這樣寫不對(duì)
describe('utils.js', () => {
  it('currency應(yīng)該能輸出正確的值', done => {
    Vue.nextTick(() => {
      expect(utils.currency(10)).to.be(10.00);
      expect(utils.currency(10, '¥')).to.be('¥10.00');
    });
  })
})

//或者這樣寫也不對(duì)
describe('utils.js', () => {
  it('currency應(yīng)該能輸出正確的值', done => { 
     expect(utils.currency(10)).to.be(10.00);
     expect(utils.currency(10, '¥')).to.be('¥10.00');
  })
})

上面的兩種寫法都有提示了一下console錯(cuò)誤,是不是需要?jiǎng)e的上面方法呢,還是說(shuō)vue的單元測(cè)試只能測(cè)試vue組件或者vue的內(nèi)部方法?

ERROR LOG: '[Vue warn]: Error in nextTick: "TypeError: expect(...).to.be is not a function"'
ERROR LOG: TypeError{}
回答
編輯回答
陌上花

為什么要加nextTick才可以呢? 去掉nextTick就報(bào)錯(cuò)了

2017年3月25日 02:10
編輯回答
陪我終
describe('utils.js', () => {
  it('currency應(yīng)該能輸出正確的值', done => { 
     expect(utils.currency(10)).to.be(10.00);
     expect(utils.currency(10, '¥')).to.be('¥10.00');
     done();//這里應(yīng)該調(diào)用done,否則會(huì)出錯(cuò)
  })
})

單純看這個(gè)函數(shù)除了done沒(méi)有調(diào)用之外沒(méi)有其他的問(wèn)題。

2017年10月22日 09:32