UNPKG

react-native-google-mobile-ads

Version:

React Native Google Mobile Ads is an easy way to monetize mobile apps with targeted, in-app advertising.

141 lines (110 loc) 4.57 kB
import { AdEventType, InterstitialAd } from '../src'; import NativeInterstitialModule from '../src/specs/modules/NativeInterstitialModule'; describe('Google Mobile Ads Interstitial', function () { describe('createForAdRequest', function () { it('throws if adUnitId is invalid', function () { // @ts-ignore expect(() => InterstitialAd.createForAdRequest(123)).toThrowError( "'adUnitId' expected an string value", ); }); it('throws if requestOptions are invalid', function () { // @ts-ignore expect(() => InterstitialAd.createForAdRequest('123', 123)).toThrowError( "InterstitialAd.createForAdRequest(_, *) 'options' expected an object value.", ); }); // has own tests it('returns a new instance', function () { const i = InterstitialAd.createForAdRequest('abc'); expect(i.constructor.name).toEqual('InterstitialAd'); expect(i.adUnitId).toEqual('abc'); expect(i.loaded).toEqual(false); }); describe('load()', () => { afterEach(() => { jest.clearAllMocks(); }); it('does call native load method', () => { const ad = InterstitialAd.createForAdRequest('abc'); ad.load(); expect(NativeInterstitialModule.interstitialLoad).toBeCalledTimes(1); }); it('does nothing if ad currently loading', () => { const ad = InterstitialAd.createForAdRequest('abc'); ad.load(); expect(NativeInterstitialModule.interstitialLoad).toBeCalledTimes(1); ad.load(); expect(NativeInterstitialModule.interstitialLoad).toBeCalledTimes(1); }); it('does nothing if ad is already loaded', () => { const ad = InterstitialAd.createForAdRequest('abc'); // @ts-ignore ad._handleAdEvent({ body: { type: AdEventType.LOADED } }); ad.load(); expect(NativeInterstitialModule.interstitialLoad).not.toBeCalled(); }); it('can be called again after ad was closed', () => { const ad = InterstitialAd.createForAdRequest('abc'); ad.load(); expect(NativeInterstitialModule.interstitialLoad).toBeCalledTimes(1); // @ts-ignore ad._handleAdEvent({ body: { type: AdEventType.CLOSED } }); ad.load(); expect(NativeInterstitialModule.interstitialLoad).toBeCalledTimes(2); }); it('can be called again after ad failed to load', () => { const ad = InterstitialAd.createForAdRequest('abc'); ad.load(); expect(NativeInterstitialModule.interstitialLoad).toBeCalledTimes(1); // @ts-ignore ad._handleAdEvent({ body: { type: AdEventType.ERROR } }); ad.load(); expect(NativeInterstitialModule.interstitialLoad).toBeCalledTimes(2); }); }); describe('show', function () { it('throws if showing before loaded', function () { const i = InterstitialAd.createForAdRequest('abc'); expect(() => i.show()).toThrowError( 'The requested InterstitialAd has not loaded and could not be shown', ); }); }); describe('addAdEventsListener', function () { it('throws if listener is not a function', function () { const i = InterstitialAd.createForAdRequest('abc'); // @ts-ignore expect(() => i.addAdEventsListener('foo')).toThrowError("'listener' expected a function"); }); it('returns an unsubscriber function', function () { const i = InterstitialAd.createForAdRequest('abc'); const unsub = i.addAdEventsListener(() => {}); expect(unsub).toBeDefined(); unsub(); }); }); describe('addAdEventListener', function () { it('throws if type is not a AdEventType', function () { const i = InterstitialAd.createForAdRequest('abc'); // @ts-ignore expect(() => i.addAdEventListener('foo')).toThrowError( "'type' expected a valid event type value.", ); }); it('throws if listener is not a function', function () { const i = InterstitialAd.createForAdRequest('abc'); // @ts-ignore expect(() => i.addAdEventListener(AdEventType.LOADED, 'foo')).toThrowError( "'listener' expected a function", ); }); it('returns an unsubscriber function', function () { const i = InterstitialAd.createForAdRequest('abc'); const unsub = i.addAdEventListener(AdEventType.LOADED, () => {}); expect(unsub).toBeDefined(); unsub(); }); }); }); });