1import { unmockAllProperties, mockLinking } from 'jest-expo'; 2 3import ExpoWebBrowser from '../ExpoWebBrowser'; 4import * as WebBrowser from '../WebBrowser'; 5 6const fakeReturnValue = { 7 type: 'cancel', 8}; 9 10function applyMocks() { 11 mockLinking(); 12 ExpoWebBrowser.openBrowserAsync.mockImplementation(async () => fakeReturnValue); 13} 14 15beforeEach(() => { 16 applyMocks(); 17}); 18 19afterEach(() => { 20 unmockAllProperties(); 21}); 22 23it(`openBrowserAsync returns correctly`, async () => { 24 const pageUrl = 'http://expo.io'; 25 const openResult = await WebBrowser.openBrowserAsync(pageUrl); 26 expect(openResult).toEqual(fakeReturnValue); 27 expect(ExpoWebBrowser.openBrowserAsync).toHaveBeenCalledWith(pageUrl, {}); 28}); 29 30it(`dismissBrowser returns nothing`, () => { 31 const closeResult = WebBrowser.dismissBrowser(); 32 expect(closeResult).toBeUndefined(); 33 expect(ExpoWebBrowser.dismissBrowser).toHaveBeenCalledTimes(1); 34}); 35 36it(`openAuthSessionAsync allows subsequent attempts if the browser never opens`, async () => { 37 ExpoWebBrowser.openBrowserAsync.mockRejectedValueOnce(new Error('No matching activity!')); 38 ExpoWebBrowser.openBrowserAsync.mockRejectedValueOnce(new Error('Current activity not found!')); 39 ExpoWebBrowser.openBrowserAsync.mockRejectedValueOnce(new Error('No package manager!')); 40 const pageUrl = 'http://expo.io'; 41 const redirectUrl = 'exp://expo.io'; 42 await expect(WebBrowser.openAuthSessionAsync(pageUrl, redirectUrl)).rejects.toThrowError( 43 'No matching activity!' 44 ); 45 await expect(WebBrowser.openAuthSessionAsync(pageUrl, redirectUrl)).rejects.toThrowError( 46 'Current activity not found!' 47 ); 48 await expect(WebBrowser.openAuthSessionAsync(pageUrl, redirectUrl)).rejects.toThrowError( 49 'No package manager!' 50 ); 51}); 52