Giter Club home page Giter Club logo

open-source-encore-2023-05-22's Introduction

Open Source Encore: Playwright test.only with forbidOnly error message improvement

While working on an E2E UI test for a project at work, I ran into an issue where I was trying to reproduce a Playwright test failure that happene in the GitHub Actions CI and depended on the CI environment / paths taken only while running in CI to reproduce.

I was running my Playwright command and trying to isolate the exact failing test with the use of the test.only shorthand to make sure the feedback loop was the fastest possible.

While doing this, though, I ran into this error:

Error: focused item found in the --forbid-only mode

I got confused at this as I did not know what an item was in this context, what it means for it to be focused and why it was focused and where did the forbid only mode come from.

An astute reader is already well aware of the problem, but it took me a while to figure out this message is coming from the Playwright test runner and doesn't indicate a problem with my test per se, but instead, warns me of the fact that I have marked a test (the item) as focused (the .only) and I can't do that because the runner is in forbidMode which is a special mode meant for the CI runs where .only is disallowed to let you know you've committed the .only in by mistake.

Of course I did not commit anything, but I did opt into the forbidOnly mode due to my use of CI=1 npx playwright test (because I was reproducing an issue that would only happen on the CI) and since I scaffolded the Playwright test project with npm init playwright, it contained a default configuration file which happens to enable the forbidOnly option if CI is on:

 {
  forbidOnly: !!process.env.CI
}

So this is how my test runner ended up in the forbid only mode (which can also be entered via the --forbid-only CLI flag) and that's why it was failing to run the test.

I wasn't happy at the usefulness of this message so I decided to contribute an improved version that would make it clearer what was happening from the get-go.

My first step was to figure out where in Playwright this message is coming from and the answer is the packages/playwright-test/src/runner/loadUtils.ts file with its createForbidOnlyErrors method.

I decided to go for this wording:

Error: item focused with '.only' is not allowed due to the ${forbidOnlySource}

It tells you that focused means .only and while item is still not explained properly, the link with .only makes it clear that we're talking of the test method the .only is adorning.

forbidOnlySource is a varible that tells you whether the forbid only mode was entered through the configuration file option shown above or the CLI flag.

I spent some time figuring out how I could tell whether the scaffolded project (through npm init playwright) is a JavaScript or a TypeScript project so that the error message could also namedrop the configuration file with the right file extension if the entry point of the forbid only mode is the configuration file.

Turns out, according to the Playwright maintainers, there isn't a way to tell, but there is a way to tell what the configuration file name is! Classis XY problem, but it all ended up working out, because I was able to interleave the file path into the message, guiding the future Playwright users.

While implementing the PR, I ran into the classic first-time contributor problem I run into with most projects: the CONTRIBUTING.md file was incompleted/out of date.

The helpful maintainer Dmitry Gozman helped me fill in the gaps in the steps as they were laid out in this file and my PR ended up also contributing an improvement to this file as a result.

Overall I am happy with this work in progress (the PR is not merged yet) contributing to Playwright, because it might help us some people in the future not only figure out what the problem is with their test that is refusing to run faster, but also to contribute to the Playwright project as such due to the improvements made to the contributing guide.

You can find the PR here: microsoft/playwright#23146

open-source-encore-2023-05-22's People

Contributors

tomashubelbauer avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.