我有一个类在构造函数中启动并触发一个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
。我觉得我错过了这个难题的一大部分。对这个简单的问题道歉。
答案 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()
})