Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jest React - New snapshot was not written. The update flag must be explicitly passed to write a new snapshot

I have a asp.net core project created with React template, trying to unit test a simple component with Jest snapshot and I am receiving below error.Can any one suggest how to fix it.

index.js

import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { Button } from 'reactstrap'

const CloseHistoryButton = ({ onClick }) =>
    <div className="d-flex justify-content-end">
        <Button color="danger" size="sm" onClick={onClick}>
            <FontAwesomeIcon icon="times" /> Close History
        </Button>
    </div>

export default CloseHistoryButton  

CloseHistoryButton.test

import ReactDOM from 'react-dom';
import { shallow, mount, render } from 'enzyme';
import { cleanup } from '@testing-library/react';
import renderer from 'react-test-renderer';
import CloseHistoryButton from '../CloseHistoryButton/index';
import registerIcons from './../../../../icons/registerIcons';
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
Enzyme.configure({ adapter: new Adapter() });

// automatically unmount and cleanup DOM after the test is finished.
afterEach(cleanup);
registerIcons();
test('renders correctly', () => {
    const tree = renderer.create(
                                <CloseHistoryButton />
                                ).toJSON();
    expect(tree).toMatchSnapshot();
});

Error Log:

expect(received).toMatchSnapshot()

New snapshot was not written. The update flag must be explicitly passed to write a new snapshot.

This is likely because this test is run in a continuous integration (CI) environment in which snapshots are not written by default.

Received value
<div
  className="d-flex justify-content-end"
>
  <button
    aria-label={null}
    className="btn btn-danger btn-sm"
    onClick={[Function]}
  >
    <svg
      aria-hidden="true"
      className="svg-inline--fa fa-times fa-w-11 "
      data-icon="times"
      data-prefix="fas"
      focusable="false"
      role="img"
      style={Object {}}
      viewBox="0 0 352 512"
      xmlns="http://www.w3.org/2000/svg"
    >
      <path
        d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"
        fill="currentColor"
        style={Object {}}
      />
    </svg>
     Close History
  </button>
</div>

  27 |                                 <CloseHistoryButton />
  28 |                                 ).toJSON();
> 29 |     expect(tree).toMatchSnapshot();
     |                  ^
  30 | });
  31 |
  32 | describe('Test Button component', () => {

  at Object.toMatchSnapshot (src/features/FleetImport/Results/CloseHistoryButton/CloseHistoryButton.test.js:29:18)

› 1 snapshot failed. Snapshot Summary › 1 snapshot failed from 1 test suite. Inspect your code changes or re-run jest with -u to update them.

Test Suites: 1 failed, 1 passed, 2 total Tests: 1 failed, 3 passed, 4 total Snapshots: 1 failed, 1 total Time: 4.338s Ran all test suites. npm ERR! Test failed. See above for more details.

like image 256
Auo Avatar asked Nov 27 '19 20:11

Auo


People also ask

How do you update a snapshot test in React?

You will likely see the interactive mode. Press u to update the failing tests. However, you can also install the Jest CLI globally with npm install jest -g . This allows you to use the jest --updateSnapshot command from the terminal to update all snapshots.

How do I update jest screenshots?

You should then update the snapshot tests. Note: Alternatively, if you have Jest installed globally, you can run jest --updateSnapshot or jest -u . This will update the snapshots to match the updates you made, and your tests will pass.

How do I create a snapshot using jest?

Setting up the sample React app Clone the repository by running this command in your terminal: git clone https://github.com:mwaz/jest-snapshot-testing.git; cd jest-snapshot-testing; Next, you will need the following dependencies installed from the npm React testing library, Jest, and the React test renderer.

Should I commit jest snapshots?

​ Yes, all snapshot files should be committed alongside the modules they are covering and their tests. They should be considered part of a test, similar to the value of any other assertion in Jest.


3 Answers

Just explicitly pass it in your CI configuration, like:

- yarn test -- --coverage --updateSnapshot
like image 165
ImLeo Avatar answered Oct 18 '22 01:10

ImLeo


In your package.json script which runs the tests append -u to update the snapshot while running the test like react-scripts test -u. This should fix the snapshot test in CI.

like image 11
akhil choudhary Avatar answered Oct 18 '22 03:10

akhil choudhary


Two solutions to the issue 1) remove cross-env CI=true from package.json OR 2) Setup the CICD to run the unit tests.--- To do this add a npm task within the build pipeline and select the option within the task as "custom" and provide the command as test

that should trigger the unit tests whenever there is a build triggered.

like image 1
Auo Avatar answered Oct 18 '22 01:10

Auo