Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

detox.init doesn't resolve in hybrid apps with initial native page (until you manually navigate to a react native page) #615

Closed
etaiklein opened this issue Mar 9, 2018 · 11 comments

Comments

@etaiklein
Copy link

etaiklein commented Mar 9, 2018

Description

While running detox in my hybrid app, detox gets stuck on init before timing out. [last log is detox verb ws send: {"type":"isReady","params":{},"messageId":-1000}]

The hybrid app has native login, but most of the app is in react native. If I rush through login and get to the react native part of the app then Detox runs smoothly.

Setup

Setup the same as described in https://github.com/wix/detox/blob/master/docs/Introduction.GettingStarted.md

init.js

const detox = require('detox');
const config = require('../package.json').detox;

before(async () => {
  console.log("************************* CONSOLE LOG ASYNC BEFORE *************************");
  await detox.init(config);
  console.log("************************* CONSOLE LOG ASYNC END BEFORE *************************");
});

after(async () => {
  await detox.cleanup();
});

As you can see in the log, it never reaches 'CONSOLE LOG ASYNC END BEFORE' (unless I skip through the ios section of the app quickly)

Package.json

  "dependencies": {
    ...
    "mocha": "5.0.4",
    "detox": "7.1.0",
    ...
  },
  "detox": {
    "configurations": {
      "ios.sim.debug": {
        "binaryPath": "member/ios/build/Build/Products/Debug-iphonesimulator/MyappMember.app",
        "build": "xcodebuild -workspace member/ios/MyappMember.xcworkspace -scheme MyappMember -configuration Debug  -sdk iphonesimulator -derivedDataPath member/ios/build",
        "type": "ios.simulator",
        "name": "iPhone 7"
      }
    }
  },

Detox, Node, Device, Xcode and macOS Versions

  • Detox: 7.1.0
  • Node: 8.9.4
  • Device: Iphone 7 simulator
  • Xcode: 9.2
  • macOS: 10.12.6

Device and verbose Detox logs

verbose Detox Logs

Bug Crusher:mobile etai$ detox test -l verbose
node_modules/.bin/mocha e2e --opts e2e/mocha.opts  --loglevel verbose


************************* CONSOLE LOG ASYNC BEFORE *************************
detox-server info 16:50:24: server listening on localhost:57324...
detox verb ws onOpen [object Object]
detox verb ws send: {"type":"login","params":{"sessionId":"417aebb8-870c-5798-827c-de0301e7cf17","role":"tester"},"messageId":0}
detox verb ws onMessage: {"type":"loginSuccess","params":{"sessionId":"417aebb8-870c-5798-827c-de0301e7cf17","role":"tester"},"messageId":0}
detox verb ws
detox verb 1: applesimutils --list "iPhone 7" --maxResults=1
detox info 1: Searching for device matching iPhone 7...
detox verb 1: stdout: [
detox verb 1: stdout:   {
detox verb 1: stdout:     "state" : "Booted",
detox verb 1: stdout:     "availability" : "(available)",
detox verb 1: stdout:     "name" : "iPhone 7",
detox verb 1: stdout:     "udid" : "ABE6CC96-22A1-4FB3-A62E-017033848CD7",
detox verb 1: stdout:     "os" : {
detox verb 1: stdout:       "version" : "11.2",
detox verb 1: stdout:       "availability" : "(available)",
detox verb 1: stdout:       "name" : "iOS 11.2",
detox verb 1: stdout:       "identifier" : "com.apple.CoreSimulator.SimRuntime.iOS-11-2",
detox verb 1: stdout:       "buildversion" : "15C107"
detox verb 1: stdout:     }
detox verb 1: stdout:   }
detox verb 1: stdout: ]
detox verb 1: stdout:
detox verb 2: detox verb 2: applesimutils --list
...
detox verb 3: /usr/bin/xcrun simctl uninstall ABE6CC96-22A1-4FB3-A62E-017033848CD7 com.myapp.MyappMemberDebug
detox info 3: Uninstalling com.myapp.MyappMemberDebug...
detox info 3: com.myapp.MyappMemberDebug uninstalled
detox verb 4: /usr/bin/xcrun simctl install ABE6CC96-22A1-4FB3-A62E-017033848CD7 /Users/etai/Code/data/mobile/member/ios/build/Build/Products/Debug-iphonesimulator/MyappMember.app
detox info 4: Installing /Users/etai/Code/data/mobile/member/ios/build/Build/Products/Debug-iphonesimulator/MyappMember.app...
detox info 4: /Users/etai/Code/data/mobile/member/ios/build/Build/Products/Debug-iphonesimulator/MyappMember.app installed
detox verb 5: /usr/bin/xcrun simctl terminate ABE6CC96-22A1-4FB3-A62E-017033848CD7 com.myapp.MyappMemberDebug
detox info 5: Terminating com.myapp.MyappMemberDebug...
detox info 5: com.myapp.MyappMemberDebug terminated
detox verb 6: /bin/cat /dev/null >$HOME/Library/Developer/CoreSimulator/Devices/ABE6CC96-22A1-4FB3-A62E-017033848CD7/data/tmp/detox.last_launch_app_log.out 2>$HOME/Library/Developer/CoreSimulator/Devices/ABE6CC96-22A1-4FB3-A62E-017033848CD7/data/tmp/detox.last_launch_app_log.err && SIMCTL_CHILD_DYLD_INSERT_LIBRARIES="/Users/etai/Library/Detox/ios/fc3bb123b36c426327a2ab12f6d5185aa779ec37/Detox.framework/Detox" /usr/bin/xcrun simctl launch --stdout=/tmp/detox.last_launch_app_log.out --stderr=/tmp/detox.last_launch_app_log.err ABE6CC96-22A1-4FB3-A62E-017033848CD7 com.myapp.MyappMemberDebug --args -detoxServer ws://localhost:57324 -detoxSessionId 417aebb8-870c-5798-827c-de0301e7cf17
detox info 6: Launching com.myapp.MyappMemberDebug...
detox verb 6: stdout: com.myapp.MyappMemberDebug: 6445
detox verb 6: stdout:
detox info 6: com.myapp.MyappMemberDebug launched. The stdout and stderr logs were recreated, you can watch them with:
        tail -F $HOME/Library/Developer/CoreSimulator/Devices/ABE6CC96-22A1-4FB3-A62E-017033848CD7/data/tmp/detox.last_launch_app_log.{out,err}
detox verb ws send: {"type":"isReady","params":{},"messageId":-1000}
  1) "before all" hook

  0 passing (2m)
  1 failing

  1) "before all" hook:
     Error: Timeout of 120000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.




child_process.js:644
    throw err;
    ^

Error: Command failed: node_modules/.bin/mocha e2e --opts e2e/mocha.opts  --loglevel verbose
    at checkExecSyncError (child_process.js:601:13)
    at Object.execSync (child_process.js:641:13)
    at runMocha (/Users/etai/Code/data/mobile/node_modules/detox/local-cli/detox-test.js:72:6)
    at Object.<anonymous> (/Users/etai/Code/data/mobile/node_modules/detox/local-cli/detox-test.js:50:5)
    at Module._compile (module.js:643:30)
    at Object.Module._extensions..js (module.js:654:10)
    at Module.load (module.js:556:32)
    at tryModuleLoad (module.js:499:12)
    at Function.Module._load (module.js:491:3)
    at Function.Module.runMain (module.js:684:10)
Bug Crusher:mobile etai$

Device Logs

2018-03-08 16:50:29.645 MyappMember[6445:1612042] Crash handler setup started.
2018-03-08 16:50:29.645 MyappMember[6445:1612042] Crash handler setup completed.
2018-03-08 16:50:29.646 MyappMember[6445:1612042] Enabling accessibility for automation on Simulator.
2018-03-08 16:50:30.447 MyappMember[6445:1612042] You've implemented -[<UIApplicationDelegate> application:didReceiveRemoteNotification:fetchCompletionHandler:], but you still need to add "remote-notification" to the list of your supported UIBackgroundModes in your Info.plist.
2018-03-08 16:50:30:452 MyappMember[6445:1612042] INFO: App did finish launching. Running v4.8.0.
2018-03-08 16:50:30:469 MyappMember[6445:1612042] INFO: First time app has been run. Clearing session token from keychain.
2018-03-08 16:50:30.519 MyappMember[6445:1612042] Simulator user has requested new graphics quality: 10
2018-03-08 16:50:30.567 MyappMember[6445:1612042] [Crashlytics] Version 3.8.6 (124)
2018-03-08 16:50:30:577 MyappMember[6445:1612042] INFO: App did become active
2018-03-08 16:50:30:583 MyappMember[6445:1612042] DBG: Device registered 0 | Alerts enabled 0
2018-03-08 16:50:30:584 MyappMember[6445:1612042] INFO: Checking if healthkit data available in background
2018-03-08 16:50:30:584 MyappMember[6445:1612042] INFO: Allocated new OIHealthKitService <OIHealthKitService: 0x6040002a5ac0>
2018-03-08 16:50:30:584 MyappMember[6445:1612042] INFO: Allocated steps data source
2018-03-08 16:50:30:584 MyappMember[6445:1612042] INFO: Allocated new steps data source <OIStepsDataSource: 0x6040000dc230>
2018-03-08 16:50:30.664 MyappMember[6445:1612042] Unknown class UIview in Interface Builder file.
2018-03-08 16:50:30:676 MyappMember[6445:1612042] INFO: [OIKeychainService searchKeychainCopyMatchingIdentifier:] Error -25300. Identifier com.myapp.keychain.session_token
2018-03-08 16:50:30:678 MyappMember[6445:1612042] INFO: View will appear for Logged Out Home Screen
2018-03-08 16:50:30:756 MyappMember[6445:1612042] INFO: Healthkit data available: 1
2018-03-08 16:50:30:779 MyappMember[6445:1612042] INFO: OIQuickLoginAuthManager: Prompt not shown this run
2018-03-08 16:50:30:780 MyappMember[6445:1612042] INFO: [OIKeychainService searchKeychainCopyMatchingIdentifier:] Error -25300. Identifier touchID
2018-03-08 16:50:30:781 MyappMember[6445:1612042] INFO: [OIKeychainService searchKeychainCopyMatchingIdentifier:] Error -25300. Identifier passcode
2018-03-08 16:50:30:781 MyappMember[6445:1612042] INFO: OIQuickLoginAuthManager: Neither touch id nor passcode enabled so nothing to do
2018-03-08 16:50:30:797 MyappMember[6445:1612042] INFO: View will appear for (null)
2018-03-08 16:50:30:797 MyappMember[6445:1612042] INFO: OIViewController session is nil!
2018-03-08 16:50:32.772 MyappMember[6445:1612042] [Crashlytics:Crash] Warning: NSUncaughtExceptionHandler is 'grey_uncaughtExceptionHandler' in '/Users/etai/Library/Detox/ios/fc3bb123b36c426327a2ab12f6d5185aa779ec37/Detox.framework/Frameworks/EarlGrey.framework/EarlGrey'
[Crashlytics] The signal SIGABRT has a non-Crashlytics handler (CLSLookupFunctionPointer).  This will interfere with reporting.
[Crashlytics] The signal SIGBUS has a non-Crashlytics handler (CLSLookupFunctionPointer).  This will interfere with reporting.
[Crashlytics] The signal SIGFPE has a non-Crashlytics handler (CLSLookupFunctionPointer).  This will interfere with reporting.
[Crashlytics] The signal SIGILL has a non-Crashlytics handler (CLSLookupFunctionPointer).  This will interfere with reporting.
[Crashlytics] The signal SIGSEGV has a non-Crashlytics handler (CLSLookupFunctionPointer).  This will interfere with reporting.
[Crashlytics] The signal SIGSYS has a non-Crashlytics handler (CLSLookupFunctionPointer).  This will interfere with reporting.
[Crashlytics] The signal SIGTRAP has a non-Crashlytics handler (CLSLookupFunctionPointer).  This will interfere with reporting.

edit:
It looks like once I hit react native, I can switch between native and non-native code (i.e. log out and do the log in flow in native). This tells me that the detox.init promise won't resolve until it hits react native. After that detox interacts with native and react native perfectly fine.This seems more like a bug than a usage error, so I'm going to close the stackoverflow question.

@etaiklein etaiklein changed the title Detox test hanging in hybrid app at detox.init detox.init doesn't resolve in hybrid apps with initial native page (until you manually navigate to a react native page) Mar 9, 2018
@LeoNatan
Copy link
Contributor

Could you please enable synchronization debug (as described in the documentation) and post the log output here?

@LeoNatan
Copy link
Contributor

Could be a bug in our end in the start up logic. I will look into this soon.

@LeoNatan
Copy link
Contributor

This remains open. Something in the tools prevents me from from being able to effectively debug this.

@etaiklein
Copy link
Author

Here's running with the debug-synch flag. The output seems the same :/

Bug Crusher:mobile etai$ detox test --debug-synchronization 12000
node_modules/.bin/mocha e2e --opts e2e/mocha.opts     --debug-synchronization 12000


detox-server info 19:15:38: server listening on localhost:50263...
detox info 1: Searching for device matching iPhone 7...
detox info 3: Uninstalling com.myapp.MyappMemberDebug...
detox info 3: com.myapp.MyappMemberDebug uninstalled
detox info 4: Installing /Users/etai/Code/data/mobile/member/ios/build/Build/Products/Debug-iphonesimulator/MyappMember.app...
detox info 4: /Users/etai/Code/data/mobile/member/ios/build/Build/Products/Debug-iphonesimulator/MyappMember.app installed
detox info 5: Terminating com.myapp.MyappMemberDebug...
detox info 5: com.myapp.MyappMemberDebug terminated
detox info 6: Launching com.myapp.MyappMemberDebug...
detox info 6: com.myapp.MyappMemberDebug launched. The stdout and stderr logs were recreated, you can watch them with:
        tail -F $HOME/Library/Developer/CoreSimulator/Devices/ABE6CC96-22A1-4FB3-A62E-017033848CD7/data/tmp/detox.last_launch_app_log.{out,err}
  1) "before all" hook

  0 passing (2m)
  1 failing

  1) "before all" hook:
     Error: Timeout of 120000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.




child_process.js:644
    throw err;
    ^

Error: Command failed: node_modules/.bin/mocha e2e --opts e2e/mocha.opts     --debug-synchronization 12000
    at checkExecSyncError (child_process.js:601:13)
    at Object.execSync (child_process.js:641:13)
    at runMocha (/Users/etai/Code/data/mobile/node_modules/detox/local-cli/detox-test.js:72:6)
    at Object.<anonymous> (/Users/etai/Code/data/mobile/node_modules/detox/local-cli/detox-test.js:50:5)
    at Module._compile (module.js:643:30)
    at Object.Module._extensions..js (module.js:654:10)
    at Module.load (module.js:556:32)
    at tryModuleLoad (module.js:499:12)
    at Function.Module._load (module.js:491:3)
    at Function.Module.runMain (module.js:684:10)

@taylesworth
Copy link

We are evaluating using detox but this is a blocking issue for us.

@LeoNatan
Copy link
Contributor

Hang in there, we'll fix this shortly

@LeoNatan
Copy link
Contributor

The blocking issue I had with development has been resolved, so I will take a look again.

@etaiklein
Copy link
Author

Yay! When can we expect a new release?

@LeoNatan
Copy link
Contributor

Soon.

@rotemmiz
Copy link
Member

Ninja magician!

@etaiklein
Copy link
Author

Thanks!

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

5 participants