Expect a mock node, but found a mock value at browser.runtime.onMessage
kabeleced77 opened this issue · comments
kabeleced77 commented
Following code shall be tested:
import browser from 'webextension-polyfill'
export default class OneOffMessaging<TReceive, TReply> {
public handle(handleMessage: (message: TReceive, sender?: browser.Runtime.MessageSender) => Promise<TReply>): void {
browser.runtime.onMessage.addListener(handleMessage)
}
}
For the first unit test I use following setup following the guidlines from here:
import { deepMock } from 'mockzilla'
import { mockEvent, MockzillaEventOf } from 'mockzilla-webextension'
import { Runtime } from 'webextension-polyfill'
import OneOffMessaging from './GithubOneOffMessaging'
describe('OneOffMessaging', () => {
const [messageSender, mockMessageSender, mockMessageSenderNode] = deepMock<Runtime.MessageSender>('messageSender')
let addListenerOnMessage: MockzillaEventOf<typeof mockBrowser.runtime.onMessage>
const mockMessageSenderFrame = 456
const mockMessageSenderId = '123'
const mockMessageSenderUrl = 'url'
const msg01 = 'message-in-unit-test'
beforeEach(() => {
addListenerOnMessage = mockEvent(mockBrowser.runtime.onMessage)
mockMessageSenderNode.enable()
mockMessageSender.frameId?.mock(mockMessageSenderFrame)
mockMessageSender.id?.mock(mockMessageSenderId)
mockMessageSender.url?.mock(mockMessageSenderUrl)
})
afterEach(() => mockMessageSenderNode.verifyAndDisable())
describe('OneOffMessaging function test', () => {
it('message-handling by callback receiving message and messageSender-data; no reply', async () => {
const listener = jest.fn()
mockBrowser.runtime.onMessage.addListener.expect(listener, expect.anything())
const sut = new OneOffMessaging<string, void>()
sut.handle(listener)
addListenerOnMessage.emit(msg01, messageSender)
})
})
})
Executing the unit test leads to following output:
Expect a mock node, but found a mock value at browser.runtime.onMessage
Invocation:
26 | it('message-handling by callback receiving message and messageSender-data; no reply', async () => {
27 | const listener = jest.fn()
> 28 | mockBrowser.runtime.onMessage.addListener.expect(listener, expect.anything())
| ^
29 | const sut = new OneOffMessaging<string, void>()
30 | sut.handle(listener)
31 | addListenerOnMessage.emit(msg01, messageSender)
What is wrong? Thank you