Рассмотрим значение expected и actual литерала объекта JSON:

        let expectedResult = {
                [0.9272952180016122, 1.1760052070951352, 1.0808390005411683],
                [1.2870022175865687, 0.8097835725701669,  1.240498971965643],
                [1.3494818844471053, 1.014197008784674,  1.3894765523934063]
            ],
            'spectrum': [
                [ 5, 13, 17],
                [25, 29, 37],
                [41, 53, 61]
            ]
        };

        let actualResult = {
                [0.9272952180016122, 1.1760052070951352, 1.0808390005411683],
                [1.2870022175865687, 0.8097835725701669,  1.240498971965643],
                [1.3494818844471053, 1.014197008784674,  1.3894765523934063]
            ],
            'spectrum': [
                [ 5, 13, 17],
                [25, 29, 37],
                [41, 53, 61]
            ]
        };

Вторая запись отличается: 1.1760052070951352 vs 1.176005207095135. Есть ли какая-нибудь конструкция для обработки этого сравнения в javascript или Chai?

Следующее не работает, так как оно заканчивается сравнением объектов

    chai.expect(actualResult).to.be.closeTo(expectedResult);

AssertionError: expectedResult {Object (real, imag, ...)} должен быть числом

0
WestCoastProjects 16 Июл 2020 в 17:26

1 ответ

Лучший ответ

Эта функция, по-видимому, предназначена для chai5. https://github.com/chaijs/chai/issues/644.

план состоит в том, чтобы иметь такое поведение в Chai 5. На данный момент вы можете создавать плагины, которые принимают сопоставители Sinon, но имейте в виду, что к тому времени, когда выйдет Chai 5, они могут устареть 😃

А пока вот обходной путь

В итоге я реализовал подход @vaskevich как плагин. Он даже заменяет этот потенциально сбивающий с толку текст о вызываемых заглушках. Вот:

chai.use((_chai, utils) => {
  chai.Assertion.addMethod('matchEql', function fn(expectedMatch) {
    const subject = utils.flag(this, 'object');
    const stub = sinon.stub();
    stub(subject);
    try {
      sinon.assert.calledWithMatch(stub, expectedMatch);
    } catch (error) {
      error.name = 'MatchAssertionError';
      error.message = error.message.replace(
        /^expected stub to be called with match/,
        `expected ${utils.objDisplay(subject)} to match`
      );
      throw error;
    }
  });
});
0
StephenBoesch 16 Июл 2020 в 14:26