50 lines
2.3 KiB
Plaintext
50 lines
2.3 KiB
Plaintext
Comparing two values of different types with operator ``++===++`` or ``++\!==++`` will always return respectively ``++true++`` and ``++false++``. The same is true for operators ``++==++`` and ``++\!=++`` when two ``++objects++`` of unrelated types, i.e. one is not a prototype of the other, are compared.
|
|
|
|
Chai provides assertion functions which use these operators to compare two values. These assertions should not compare values of incompatible types as they would always fail or always succeed.
|
|
|
|
== Noncompliant Code Example
|
|
|
|
----
|
|
const assert = require('chai').assert;
|
|
const expect = require('chai').expect;
|
|
const should = require('chai').should();
|
|
|
|
describe("invalid comparisons", function() {
|
|
|
|
it("uses chai 'assert'", function() {
|
|
const str = "1";
|
|
const today = new Date();
|
|
const nb = new Number(42);
|
|
|
|
// These assertions use non-strict equality. Only unrelated "object" types are considered.
|
|
assert.equal(today, nb); // Noncompliant. This always fails.
|
|
assert.notEqual(today, nb); // Noncompliant. This always succeeds.
|
|
|
|
// These assertions use strict equality. Unrelated "object" types and primitive types are considered.
|
|
assert.strictEqual(str, 1); // Noncompliant. This always fails.
|
|
assert.notStrictEqual(str, 1); // Noncompliant. This always succeeds.
|
|
|
|
// Comparing primitive types to objects with == or != is ok
|
|
// even if it is not recommended. Using strict equality is better.
|
|
assert.equal(str, [1]); // Ok
|
|
assert.notEqual(str, [0]); // Ok
|
|
});
|
|
|
|
it("uses chai 'expect' and 'should'", function() {
|
|
const str = "1";
|
|
// These assertions use strict equality
|
|
expect(str).to.equal(1); // Noncompliant. This always fails.
|
|
expect(str).to.not.equal(1); // Noncompliant. This always succeeds.
|
|
|
|
str.should.equal(1); // Noncompliant. This always fails.
|
|
str.should.not.equal(1); // Noncompliant. This always succeeds.
|
|
});
|
|
});
|
|
----
|
|
|
|
== See
|
|
|
|
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Equality[MDN webdoc - Equality]
|
|
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Strict_equality[MDN webdoc - Strict Equality]
|
|
* S2159 Silly equality checks should not be made
|