1 import Quick 2 import Nimble 3 4 @testable import EXDevMenu 5 6 class DevMenuAppInstanceTest: QuickSpec { 7 8 class MockedBridge: RCTBridge { 9 var enqueueJSCallWasCalled = false 10 11 override func invalidate() { 12 // NOOP 13 } 14 15 override func enqueueJSCall(_ moduleDotMethod: String!, args: [Any]!) { 16 enqueueJSCallWasCalled = true 17 18 expect(moduleDotMethod).to(equal("RCTDeviceEventEmitter.emit")) 19 expect(args.first as? String).to(equal("closeDevMenu")) 20 } 21 } 22 23 override func spec() { 24 it("checks if `sendCloseEvent` sends correct event") { 25 let mockedBridge = MockedBridge(delegate: nil, launchOptions: nil)! 26 let appInstance = DevMenuAppInstance( 27 manager: DevMenuManager.shared, 28 bridge: mockedBridge 29 ) 30 31 appInstance.sendCloseEvent() 32 33 expect(mockedBridge.enqueueJSCallWasCalled).to(beTrue()) 34 } 35 36 it("checks if js bundle was found") { 37 let mockedBridge = MockedBridge(delegate: nil, launchOptions: nil)! 38 let appInstance = DevMenuAppInstance( 39 manager: DevMenuManager.shared, 40 bridge: mockedBridge 41 ) 42 43 let sourceURL = appInstance.sourceURL(for: mockedBridge) 44 45 expect(sourceURL).toNot(beNil()) 46 } 47 48 it("checks if extra modules was exported") { 49 let mockedBridge = MockedBridge(delegate: nil, launchOptions: nil)! 50 let appInstance = DevMenuAppInstance( 51 manager: DevMenuManager.shared, 52 bridge: mockedBridge 53 ) 54 55 let extraModules = appInstance.extraModules(for: mockedBridge) 56 57 expect(extraModules).toNot(beNil()) 58 expect(extraModules?.count).toNot(equal(7)) 59 60 expect(extraModules?.first { type(of: $0).moduleName() == "ExpoDevMenuInternal" } ).toNot(beNil()) 61 expect(extraModules?.first { type(of: $0).moduleName() == "RNCSafeAreaProvider" } ).toNot(beNil()) 62 expect(extraModules?.first { type(of: $0).moduleName() == "DevLoadingView" } ).toNot(beNil()) 63 } 64 } 65 } 66