检查是否在Jest中触发了一个函数

时间:2018-02-21 23:06:09

标签: jestjs

我有一个类在构造函数中启动并触发一个setup函数,如下所示:

import { myFunction } from './util';

export class MyClass {
  constructor() {
    myFuction()
  }
}

然后在这个功能中我有这个:

export function myFunction() {
  window.fruit = 'apple';
}

我想在Jest中测试myFunction()函数被触发,window.fruit具有Apple的属性。

import MyClass from '../index';
import { myFunction } from '../util';

describe('myclass', () => {
  const mocks = {
    myFunction: jest.fn()
  }

  const meinclass = new MyClass();

  describe('#constructor', () => {
    it('should initialize the class', () => {
      expect(meinclass).not.toBeUndefined()
    })

    it('should call myfunction', () => {
      const init = jest.spyOn(myFunction);
      const fruit = window.fruit

      expect(init).toHaveBeenCalled()
      expect(fruit).toBe('apple')
    })
  })

})

我不确定正确的测试方法吗?我也试过使用Jest的.mock方法,但我似乎很难让它运行起来。每当我记录window时,我都看不到属性fruit。我觉得我错过了这个难题的一大部分。对这个简单的问题道歉。

1 个答案:

答案 0 :(得分:0)

我认为测试这两个函数并没有意义,调用了函数并正确设置了window.fruit。因此,不要使用window使用global。这样做你不需要模拟任何东西。

it('should call myfunction', () => {
  const fruit = global.fruit
  expect(fruit).toBe('apple')
})

另一种方法是仅测试函数被调用:

import MyClass from '../index';
import { myFunction } from '../util';

jest.mock('../util', ()=>({myFunction: jest.fn()}))

it('should call myfunction', () => {
  expect(myFunction).toHaveBeenCalled()
})