Jestjs 开玩笑

Jestjs 开玩笑,jestjs,Jestjs,使用Chai,您可以按如下方式创建间谍对象: chai.spy.object([ 'push', 'pop' ]); 使用茉莉花,您可以使用: jasmine.createSpyObj('tape', ['play', 'pause', 'stop', 'rewind']); 笑话的意思是什么 上下文:我目前正在将(typescript)Jasmine测试迁移到(typescript)Jest。在这种情况下,迁移指南基本上是无用的:与任何相对较新的技术一样,在文档中都找不到关于这一点的内容

使用Chai,您可以按如下方式创建间谍对象:

chai.spy.object([ 'push', 'pop' ]);
使用茉莉花,您可以使用:

jasmine.createSpyObj('tape', ['play', 'pause', 'stop', 'rewind']);
笑话的意思是什么

上下文:我目前正在将(typescript)Jasmine测试迁移到(typescript)Jest。在这种情况下,迁移指南基本上是无用的:与任何相对较新的技术一样,在文档中都找不到关于这一点的内容

const video = {
  play() {
    return true;
  },
};

module.exports = video;
以及测试:

const video = require('./video');

test('plays video', () => {
  const spy = jest.spyOn(video, 'play');
  const isPlaying = video.play();

  expect(spy).toHaveBeenCalled();
  expect(isPlaying).toBe(true);

  spy.mockReset();
  spy.mockRestore();
});
可在此处找到的文档:

还有jest.fn()


我为jest编写了一个非常快速的createSpyObj函数,以支持旧项目。基本上移植自Jasmine的实现

export const createSpyObj = (baseName, methodNames): { [key: string]: Mock<any> } => {
    let obj: any = {};

    for (let i = 0; i < methodNames.length; i++) {
        obj[methodNames[i]] = jest.fn();
    }

    return obj;
};
export const createSpyObj=(baseName,methodNames):{[key:string]:Mock}=>{
设obj:any={};
for(设i=0;i
大卫的回答帮助我走上了正确的道路。在我的Ionic3/Angular4项目中,我将其修改为使用ionic Mock()

在我的测试“助手”类中,我有:

export function  createSpyObj (baseName: string, methodNames: string[]): { [key: string]: jasmine.Spy } {
  const obj: any = {}
  for (let i: number = 0; i < methodNames.length; i++) {
    obj[methodNames[i]] = jasmine.createSpy(baseName, () => {})
  }
  return obj
}
在ionic Mock与Jest兼容之前,我必须复制我想要的Mock(使用
createSpyObj
):


根据@Max Millington的回答,我找到了使用
jest.fn()
方法的解决方案:

  • 创建模拟对象:
  • const-tape:any={}

  • 为模拟对象添加所需的方法
  • tape['play']=jest.fn()

  • 您可以使用spyOn模拟方法,但首先将其分配给真实对象,例如,我使用的是组件实例:

    // GIVEN
    comp.realTape = tape
    
    // WHEN
    spyOn( comp.realTape , 'play')
    comp.method()
    
    // THEN
    expect(comp.realTape.play).toHaveBeenCalledTimes(1)
    

  • 哈哈,我知道如何创建间谍:P您的示例演示了如何附加间谍。所以,为了完成我所做的,您需要添加四行。不是一个-而且上下文正在从一个旧项目切换,所以重写500个测试并不是一个好主意。
    { provide: AlertController, useFactory: () => AlertControllerMock.instance() },
    
    class AlertMock {
      public static instance (): any {
        const instance: any = createSpyObj('Alert', ['present', 'dismiss'])
        instance.present.and.returnValue(Promise.resolve())
        instance.dismiss.and.returnValue(Promise.resolve())
    
        return instance
      }
    }
    
    class AlertControllerMock {
      public static instance (alertMock?: AlertMock): any {
    
        const instance: any = createSpyObj('AlertController', ['create'])
        instance.create.and.returnValue(alertMock || AlertMock.instance())
    
        return instance
      }
    }
    
    // GIVEN
    comp.realTape = tape
    
    // WHEN
    spyOn( comp.realTape , 'play')
    comp.method()
    
    // THEN
    expect(comp.realTape.play).toHaveBeenCalledTimes(1)