I'm trying to setup Jest on my react-native project but it hasn't been playing nice with bugsnag-react-native.
With my current test configuration I'm seeing errors related to bugsnag's leaveBreadcrumb
function seen below:
FAIL app/__tests__/NetworkReducer.test.js ● Test suite failed to run TypeError: Cannot read property 'default' of undefined at Object.<anonymous> (app/__tests__/NetworkReducer.test.js:10:20) at Generator.next (<anonymous>) at Promise (<anonymous>)
I have a helper file that instantiates bugsnag:
helpers/bugSnag.js //------------------------------------------------------------------------------------------------- // Create a single instance of the bugsnag client so we don't have to duplicate our configuration // anywhere. //------------------------------------------------------------------------------------------------- // https://docs.bugsnag.com/platforms/react-native/#basic-configuration import { Client, Configuration } from 'bugsnag-react-native'; const config = new Configuration(); config.consoleBreadcrumbsEnabled = true; config.notifyReleaseStages = ['testflight', 'production']; const bugSnag = new Client(config); export default bugSnag;
So in all my files I'm importing bugSnag from this helper file rather than declaring a new Client in each file, notably in my NetworkReducer.js
where bugSnag.leaveBreadcrumb('someData')
is causing me issues.
In my NetworkReducer.test.js
I'm calling a mock:
jest.mock(bugSnag, () => { return { leaveBreadcrumb: jest.fn() }; });
where I'm also importing bugSnag from path/to/helpers/bugSnag
If I comment out the mock, I get a different error message on each of my reducer types that have a bugSnag.leaveBreadcrumb('someData')
as seen below:
TypeError: _bugSnag2.default.leaveBreadcrumb is not a function at Object.network_prop_update (app/reducers/NetworkReducer.js:29:19) at app/reducers/createReducer.js:4:29 at Object.<anonymous> (app/__tests__/NetworkReducer.test.js:80:29) at tryCallTwo (node_modules/promise/lib/core.js:45:5) at doResolve (node_modules/promise/lib/core.js:200:13) at new Promise (node_modules/promise/lib/core.js:66:3)
I thought I had a handle on this jest thing, and mocking, but I guess I've been proven wrong. I've attached my Jest's setup.js
for extra reference:
jest.mock('Linking', () => { return { addEventListener: jest.fn(), removeEventListener: jest.fn(), openURL: jest.fn(), canOpenURL: jest.fn(), getInitialURL: jest.fn(), }; }); jest.mock('PushNotificationIOS', () => { return { addEventListener: jest.fn(), requestPermissions: jest.fn(() => Promise.resolve()), getInitialNotification: jest.fn(() => Promise.resolve()), }; }); jest.mock('react-native-intercom', () => { return { registerIdentifiedUser: jest.genMockFn().mockReturnValue(Promise.resolve()), registerUnidentifiedUser: jest.genMockFn().mockReturnValue(Promise.resolve()), updateUser: jest.genMockFn().mockReturnValue(Promise.resolve()), reset: jest.genMockFn().mockReturnValue(Promise.resolve()), logEvent: jest.genMockFn().mockReturnValue(Promise.resolve()), handlePushMessage: jest.genMockFn().mockReturnValue(Promise.resolve()), displayMessenger: jest.genMockFn().mockReturnValue(Promise.resolve()), hideMessenger: jest.genMockFn().mockReturnValue(Promise.resolve()), displayMessageComposer: jest.genMockFn().mockReturnValue(Promise.resolve()), displayMessageComposerWithInitialMessage: jest.genMockFn().mockReturnValue(Promise.resolve()), displayConversationsList: jest.genMockFn().mockReturnValue(Promise.resolve()), getUnreadConversationCount: jest.genMockFn().mockReturnValue(Promise.resolve()), setLauncherVisibility: jest.genMockFn().mockReturnValue(Promise.resolve()), setInAppMessageVisibility: jest.genMockFn().mockReturnValue(Promise.resolve()), setupAPN: jest.genMockFn().mockReturnValue(Promise.resolve()), registerForPush: jest.genMockFn().mockReturnValue(Promise.resolve()), setUserHash: jest.genMockFn().mockReturnValue(Promise.resolve()), setBottomPadding: jest.genMockFn().mockReturnValue(Promise.resolve()), addEventListener: jest.fn(), removeEventListener: jest.fn() }; }); jest.mock('bugsnag-react-native', () => { return { leaveBreadcrumb: jest.fn(), Configuration: jest.fn(), Client: jest.fn() }; });
1 Answers
Answers 1
My solution was to add the following mock instead:
jest.mock('../app/helpers/bugSnag', () => { return { leaveBreadcrumb: jest.fn(), }; });
A clear explanation to all this would be helpful.
0 comments:
Post a Comment