В настоящее время он просто не будет работать, используя Symbol
в качестве ключа. Когда jasmine
выполняет сравнение, он пытается получить keys
объекта, см. jasmine.js # L4551 , функция, используемая для извлечения ключей, использует Object.keys
, см. jasmine.js # L4587 .
См. Следующий пример
const otherObject = { [Symbol('what')]: { key: 'value' } };
console.log(Object.keys(otherObject)); // ouput []
Итак, когда jasmine
запускает сравнение expect({}).toEqual(otherObject);
, оно сравнивается, если {}
с использованием сравнения глубокого равенства равно {}
, и это true
, это буквально сравнивает два пустых объекта.
Это не сработает, используя следующий пример, который должен дать сбой, но он проходит:
const mySymbol = Symbol('what');
const otherObject = { [mySymbol]: { key: 'value' } };
expect(otherObject).toEqual(
jasmine.objectContaining({ [mySymbol]: { key: 'value2' } })
);
Итак, Вы можете выполнить итерацию вашего объекта, используя Object.getOwnPropertySymbols и написать ожидание для каждого значения.
Или вы можете открыть запрос на добавление команды Jasmine, чтобы они рассмотрели проверку Symbols
, а не только ключи.
https://github.com/jasmine/jasmine/issues
Надеюсь, это поможет