intuit / proof

A tapable integration testing library for your Storybook stories
https://intuit.github.io/proof/
MIT License
86 stars 30 forks source link

__STORYBOOK_CLIENT_API__ is not defined #54

Closed hainessss closed 4 years ago

hainessss commented 4 years ago

Long shot here; My proof command is failing with Request failed with status 500 due to javascript error: __STORYBOOK_CLIENT_API__ is not defined. It's only failing in a jenkins automation environment. It seems to switch to the iframe correctly. Does anyone have any clever ideas? This is the command yarn ds proof -u ${url} -vvv --headless --browser-name chrome.

hainessss commented 4 years ago

Okay did some more digging here. This can be reproduced locally by running yarn proof -u your-storybook-url. The problem is that the iFrame actually takes a bit longer to load than it takes for the '#root' "to exist" (sometimes quite a bit longer). That creates a race condition where the getStories function fires too soon and the global variable __STORYBOOK_CLIENT_API__ is not present. Also, it turns out the waitForExist method is pretty sketchy in general here because you need the javascript to load in order to call getStories. The only thing i found to work was to put a browser.pause right before the the switchToFrame. Which is also sketchy...

adierkens commented 4 years ago

Thanks for looking into this. I haven't hit this issue in the projects we use, but i can definitely see the timing being an issue.

We could potentially defer the switchToFrame call into the retry loop we do here. That would give the frame + js some more time to load before erroring out.

hainessss commented 4 years ago

Okay, I created a PR. If it gets merged could I get access to a pre-release? I suddenly was not able to replicate the problem locally, so would like to test the fix.

adierkens commented 4 years ago

Closed by #55