[SalesForce] Mocking CurrentPageReference wire in Jest unit tests – LWC

I have a LWC component which uses CurrentPageReference from lightning/navigation bundle in a @wire function.

I am using lwc-jest to create unit tests for my components.

Using the wire with CurrentPageReference fails all tests.

I've tried to mock this wire just as all other wires connected to custom Apex controller – by emiting mock JSON data with .emit(json) method on object returned by registerApexTestWireAdapter(importedApexController) function. It seem not to work as there is still the same error as before:

TypeError: Cannot read property 'c__jobId' of undefined

So basically even that I've mocked the object returned by the wire and provided the 'c__jobId' property it still sees the state object as undefined

I found something promising on ebikes-lwc repo, some kind of mocking replacement:

export const CurrentPageReference = jest.fn();

let _pageReference, _replace;

const Navigate = Symbol('Navigate');
const GenerateUrl = Symbol('GenerateUrl');
export const NavigationMixin = Base => {
    return class extends Base {
        [Navigate](pageReference, replace) {
            _pageReference = pageReference;
            _replace = replace;
        }
        [GenerateUrl](pageReference) {}
    };
};
NavigationMixin.Navigate = Navigate;
NavigationMixin.GenerateUrl = GenerateUrl;

export const getNavigateCalledWith = () => {
    return {
        pageReference: _pageReference,
        replace: _replace
    };
};

But either I can't use it properly or it's not working for that case. (Haven't found any usages of that in the repo though).

Has anyone approached similar issue or simply know how to make those tests working?

Any trace could be helpful, thanks in advance.

Best Answer

CurrentPageReference isn't Apex Wire. Use registerTestWireAdapter(CurrentPageReference) instead of Apex Wire :)