question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

test not actually using jest-environment-jsdom-fourteen

See original GitHub issue

Describe the bug

Although createJestConfig sets the testEnvironment to jest-environment-jsdom-fourteen, it doesn’t actually end up making its what into Jest. If you create a new project with create-react-app and run yarn test --showConfig, you will get output similar to:

"testEnvironment": "/Users/thomasladd/github/jest-testenv-app/node_modules/jest-environment-jsdom/build/index.js",

The testEnvironment ends up still using jest-environment-jsdom instead of jest-environment-jsdom-fourteen.

Did you try recovering your dependencies?

Yes, created a brand new project.

Which terms did you search for in User Guide?

jest-environment-jsdom-fourteen

Environment

Environment: OS: macOS 10.14 Node: 10.15.0 Yarn: 1.17.3 npm: 6.9.0 Watchman: 4.9.0 Xcode: Xcode 10.1 Build version 10B61 Android Studio: Not Found

Packages: (wanted => installed) react: ^16.8.6 => 16.8.6 react-dom: ^16.8.6 => 16.8.6 react-scripts: 3.0.1 => 3.0.1

Steps to reproduce

  1. npx create-react-app jest-testenv-app
  2. cd jest-testenv-app
  3. yarn test --showConfig

Expected behavior

jest-environment-jsdom-fourteen should be used when running yarn test.

Actual behavior

jest-environment-jsdom is used.

Reproducible demo

I created this project using create-react-app that demonstrates the issue: https://github.com/TLadd/jest-testenv-app. Again, if you go into a newly created project and run yarn test --showConfig, you can observe that the testEnvironment is not set correctly.

I also added two tests that demonstrate that the older version of jsdom is being used:

App.js

import React from "react";
import "./App.css";

function App({ onSubmit }) {
  return (
    <div className="App">
      <form onSubmit={onSubmit}>
        <button data-testid="submit-button" type="submit">
          <span data-testid="submit-button-span">Submit Button</span>
        </button>
      </form>
    </div>
  );
}

export default App;

App.test.js

// Passes
it("calls onSubmit when the button is clicked", () => {
  const onSubmit = jest.fn();
  const { getByTestId } = render(<App onSubmit={onSubmit} />);

  fireEvent.click(getByTestId("submit-button"));

  expect(onSubmit).toHaveBeenCalled();
});

// Fails
it("calls onSubmit when the span inside the button is clicked", () => {
  const onSubmit = jest.fn();
  const { getByTestId } = render(<App onSubmit={onSubmit} />);

  fireEvent.click(getByTestId("submit-button-span"));

  expect(onSubmit).toHaveBeenCalled();
});

It’s taking advantage of a known bug in the older jsdom that has since been fixed. When clicking a span inside a submit button, it doesn’t trigger the form to submit.

So by default, the first test passes and the second on fails. If I go into node_modules/react-scripts/scripts/test.js and manually set this line

const testEnvironment =  "/Users/thomasladd/github/jest-testenv-app/node_modules/jest-environment-jsdom-fourteen/lib/index.js";

Then both tests pass.

Issue Analytics

  • State:closed
  • Created 4 years ago
  • Reactions:4
  • Comments:5 (1 by maintainers)

github_iconTop GitHub Comments

12reactions
sfbwaldercommented, Aug 10, 2019

A temporary work-around may be:

//package.json
"test": "react-scripts test --env=jsdom-fourteen"

npm test -- --showConfig now shows:

"testEnvironment": "/Users/user/dev/project/node_modules/jest-environment-jsdom-fourteen/lib/index.js",
2reactions
ianschmitzcommented, Sep 25, 2019

Doh. Thanks for reporting. Unfortunately this will likely have to wait until the next major release so we don’t break people’s tests by switching now. The workaround provided by @sfbwalder should work well. There’s also jest-environment-jsdom-fifteen available for those that care to use the latest.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Error Test environment jest-environment-jsdom cannot be ...
Error: Test environment jest-environment-jsdom cannot be found. Make sure the testEnvironment configuration option points to an existing node ...
Read more >
Configuring Jest
Configuring Jest. Jest's configuration can be defined in the package.json file of your project, or through a jest.config.js file or through ...
Read more >
Testing with Node, Jest, and JSDOM - Manning Publications
The JavaScript environment within a browser. Differently from the browser, Node can't run that script. Try executing it with node main.js and ...
Read more >
Testing Next.js apps with Jest - LogRocket Blog
Hey Somnath! This error might have been caused because of your packages not being properly installed. Please delete the “node_modules” folder ...
Read more >
Jest JSDOM - Testing React Applications, v2 - Frontend Masters
Kent shows that JSDOM is loaded by default in Jest. If not needed, the test environment can be configured to be Node instead....
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found