Use multiline template strings as values for your expectations without worrying about indentation.
yarn add jasmine-multiline-matchers
or
npm install jasmine-multiline-matchers
See explaination of the problems with multiline template strings and how they are handled in the README for dedent-preserving-indents
which is the library used under the hood of these matchers.
A version of toEqual
that supports multiline template strings.
it(`returns a multiline string`, () => {
const expected = `
Here is a multiline string
- It can be indented
However you like.
And it doesn't just check the first line`
expect(f()).toEqualMultiline(expected)
})
The expected string will have its whitespace trimmed to the line with the least whitespace, so the above would become:
Here is a multiline string
- It can be indented
However you like.
And it doesn't just check the first line
A version of toThrow
that supports multiline template strings. Note that unlike toThrow
it assumes you will supply an expected value you want to compare to the Error's message.
it(`returns a multiline string`, () => {
const expected = `
Here is a an error message
- It is formatted
However you like`
expect(() => f()).toThrowMultiline(expected)
})
Add the following line to your jest.config.js
:
{
...
setupTestFrameworkScriptFile: `<rootDir>/src/__tests__/testHelpers/customMatchers.js`,
}
Then in customMatchers.js
:
import toEqualSuccessWithValue from '../../matchers/validation/toEqualSuccessWithValue'
import toEqualFailureWithValue from '../../matchers/validation/toEqualFailureWithValue'
expect.extend({
toEqualSuccessWithValue,
toEqualFailureWithValue,
})