Skip to content

mockResolvedValue not resolving in time with Angular fakeAsync/tick #11146

Open
@aziparu

Description

@aziparu

🐛 Bug Report

To Reproduce

Steps to reproduce the behavior:

  1. Using a new Angular project with jest set up, run the following test:
import { fakeAsync, tick } from '@angular/core/testing';

class TestService {
  constructor(private dependency: any) {}

  doSomething() {
    this.dependency.getPromise().then(() => this.dependency.run());
  }
}

describe('TestService', () => {
  let dependency;
  let testService: TestService;

  beforeEach(() => {
    dependency = {
      run: jest.fn(),
      getPromise: jest.fn()
    };
    testService = new TestService(dependency);
  });

  it('this fails', fakeAsync(() => {
    dependency.getPromise.mockResolvedValue('arbitrary');

    testService.doSomething();
    tick();

    expect(dependency.run).toHaveBeenCalled();
  }));

  it('this passes', fakeAsync(() => {
    dependency.getPromise.mockImplementation(() => Promise.resolve('arbitrary'));

    testService.doSomething();
    tick();

    expect(dependency.run).toHaveBeenCalled();
  }));
});

Expected behavior

Both tests should pass

Link to repl or repo (highly encouraged)

https://github.com/aziparu/angular-jest

envinfo

  System:
    OS: macOS 10.15.7
    CPU: (16) x64 Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
  Binaries:
    Node: 12.10.0 - ~/.nodenv/versions/12.10.0/bin/node
    Yarn: 1.22.4 - ~/.nodenv/versions/12.10.0/bin/yarn
    npm: 6.14.11 - ~/.nodenv/versions/12.10.0/bin/npm
  npmPackages:
    jest: ^26.6.3 => 26.6.3

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions