如何重置 Jasmine Spy 对象?

How to reset Jasmine Spy object?

找不到用于重置 Jasmine Spy 对象的文档。 如果有更好的使用间谍对象的方法,请提出建议。

// spec.js
import { mockService } from "./mockService"; // mockService = jasmine.createSpyObj(...)

describe('test', () => {
  beforeEach(function () {
    // NOTE: Following don't work

    // mockService.reset();
    // mockService.calls.reset();
    // mockService.method.calls.reset();
  });

  it('a', () => {
    mockService.fn();
    expect(mockService.fn).toHaveBeenCalledTimes(1);
  });

  it('b', () => {
    mockService.fn();
    expect(mockService.fn).toHaveBeenCalledTimes(1);
  });
});

它应该按预期工作。

例如

const service = {
  fn() {},
};

const mockService = jasmine.createSpyObj(service, 'fn');

describe('test', () => {
  beforeEach(function () {
    mockService.fn.calls.reset();
  });

  it('a', () => {
    mockService.fn();
    expect(mockService.fn).toHaveBeenCalledTimes(1);
  });

  it('b', () => {
    mockService.fn();
    expect(mockService.fn).toHaveBeenCalledTimes(1);
  });
});

单元测试结果:

Randomized with seed 28798
Started
..


2 specs, 0 failures
Finished in 0.02 seconds
Randomized with seed 28798 (jasmine --random=true --seed=28798)
---------------|---------|----------|---------|---------|-------------------
File           | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
---------------|---------|----------|---------|---------|-------------------
All files      |     100 |      100 |      80 |     100 |                   
 index.spec.js |     100 |      100 |      80 |     100 |                   
---------------|---------|----------|---------|---------|-------------------

错误的方式:spyObj.calls.reset()

正确方法:spyObj.spyMethod.calls.reset()

注意calls.reset()是针对间谍方法而不是针对间谍对象完成的。

Jasmine reset() docs