clarkbw / jest-webextension-mock

A module to mock WebExtensions in Jest
BSD 3-Clause "New" or "Revised" License
93 stars 37 forks source link

chrome.runtime.onMessage inconsistent callback parameters? #176

Open dhakan opened 1 year ago

dhakan commented 1 year ago

Hi!

I'm working with the code located in the tabs.js module of this project as per:

sendMessage: jest.fn((tabId, message, cb) => {
    onMessageListeners.forEach((listener) => listener(tabId, message));
    if (cb !== undefined) {
      return cb();
    }
    return Promise.resolve();
  }),

From what I can see in the official docs for onMessage, the structure is as follows:

(message: any, sender: [MessageSender](https://developer.chrome.com/docs/extensions/reference/runtime/#type-MessageSender), sendResponse: function) => boolean | undefined

In my test if I run chrome.tabs.sendMessage(tabId, Message), the tabId is the first parameter of the listener, which is inconsistent with the way chrome.runtime.sendMessage calls its listener.

For more info, the listener I'm testing is

private async onMessage(
    message: Message,
    _: chrome.runtime.MessageSender,
    sendResponse: (response?: any) => void
  ) {
    console.log(message);
  }

There's also the issue with the sendResponse, which I don't believe is covered here?

Any guidance would be greatly appreciated :)

RickyMarou commented 7 months ago

Hey @dhakan - I just took over this project and moved it to https://github.com/RickyMarou/jest-webextension-mock

I couldn't move the issue tracker with it. Are you still interested in contributing? I think you might be onto something here, it looks like we should change the arguments of the onMessageListeners