Skip to content

Commit 557dd39

Browse files
authored
fix(prefer-to-be): support negative numbers (#1260)
1 parent 77a927c commit 557dd39

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

src/rules/__tests__/prefer-to-be.test.ts

+11
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ ruleTester.run('prefer-to-be', rule, {
1414
'expect(null).toBeNull();',
1515
'expect(null).not.toBeNull();',
1616
'expect(null).toBe(1);',
17+
'expect(null).toBe(-1);',
1718
'expect(null).toBe(...1);',
1819
'expect(obj).toStrictEqual([ x, 1 ]);',
1920
'expect(obj).toStrictEqual({ x: 1 });',
@@ -41,6 +42,11 @@ ruleTester.run('prefer-to-be', rule, {
4142
output: 'expect(value).toBe(1);',
4243
errors: [{ messageId: 'useToBe', column: 15, line: 1 }],
4344
},
45+
{
46+
code: 'expect(value).toStrictEqual(-1);',
47+
output: 'expect(value).toBe(-1);',
48+
errors: [{ messageId: 'useToBe', column: 15, line: 1 }],
49+
},
4450
{
4551
code: 'expect(value).toEqual(`my string`);',
4652
output: 'expect(value).toBe(`my string`);',
@@ -311,6 +317,11 @@ new TSESLint.RuleTester({
311317
output: 'expect(null).toBe(1 as unknown as string as unknown as any);',
312318
errors: [{ messageId: 'useToBe', column: 14, line: 1 }],
313319
},
320+
{
321+
code: 'expect(null).toEqual(-1 as unknown as string as unknown as any);',
322+
output: 'expect(null).toBe(-1 as unknown as string as unknown as any);',
323+
errors: [{ messageId: 'useToBe', column: 14, line: 1 }],
324+
},
314325
{
315326
code: 'expect("a string").not.toStrictEqual("string" as number);',
316327
output: 'expect("a string").not.toBe("string" as number);',

src/rules/prefer-to-be.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,14 @@ const isFirstArgumentIdentifier = (
2727
) => isIdentifier(getFirstMatcherArg(expectFnCall), name);
2828

2929
const shouldUseToBe = (expectFnCall: ParsedExpectFnCall): boolean => {
30-
const firstArg = getFirstMatcherArg(expectFnCall);
30+
let firstArg = getFirstMatcherArg(expectFnCall);
31+
32+
if (
33+
firstArg.type === AST_NODE_TYPES.UnaryExpression &&
34+
firstArg.operator === '-'
35+
) {
36+
firstArg = firstArg.argument;
37+
}
3138

3239
if (firstArg.type === AST_NODE_TYPES.Literal) {
3340
// regex literals are classed as literals, but they're actually objects

0 commit comments

Comments
 (0)