Don't expect promises toBeTruthy()

Don't write expectations like this:

expect(returnsPromise()).toBeTruthy();

Promises are always truthy, so this assertion will never fail. Usually, the intention was to match the result of the promise. If that's the case, simply add an await.

expect(await returnsPromise()).toBeTruthy();

In Protractor tests

If you're not writing a Protractor test, you can safely ignore this section.

In the past, Protractor tests have patched expect() to automatically unwrap promises, which made these assertions work as expected without needing an await. However, the control flow is deprecated and will be removed in Selenium WebDriver 4.0, and these assertions are now a bug. You'll need to await the promise as above.

If you can't await the promise because your tests need the control flow, you can use a more specific matcher.

expect(returnsPromise()).toBe(true);

This assertion will work as expected for now and will fail when the control flow is finally removed.