Jest Получено: сериализуется к той же самой строке на Объекте - PullRequest
0 голосов
/ 02 апреля 2020

newb ie тестирование здесь, и я столкнулся с этой ошибкой

module. js

import reducer from './reducer';

export default function getGModalModule({ domain }) {
  return {
    id: `GModal-module-${domain}`,
    reducerMap: {
      [domain]: reducer({
        domain,
      }),
    },
  };
}

module.test. js

import getGModalModule from '../module';
import reducer from '../reducer';

describe('getGModalModule', () => {
  it('returns the correct module', () => {
    const reducers = reducer({
      domain: 'demo'
    })

    const expectVal = getGModalModule({
      domain: 'demo'
    });
    const received = {
      id: `GModal-module-demo`,
      reducerMap: {
        demo: reducers,
      },
    }
    console.log("expectVal", expectVal)
    console.log("received", received)

    expect(expectVal).toEqual(received);
  });
});

Ошибка говорит что-то вроде этого:

Expected: {"id": "GModal-module-demo", "reducerMap": {"demo": [Function gModalReducer]}}
Received: serializes to the same string

Я попытался выйти из результата, и они выглядят точно так же, любая идея, почему это не так не прошли тест?

expectVal { id: 'GModal-module-demo', reducerMap: { demo: [Function: gModalReducer] } }
received { id: 'GModal-module-demo', reducerMap: { demo: [Function: gModalReducer] } }

Заранее спасибо,

1 Ответ

0 голосов
/ 02 апреля 2020

Jest не может сравнивать функции. Даже если они сериализованы в одну и ту же строку, даже если их исходный код одинаков, функция может ссылаться на разные переменные через замыкания или привязываться к разным this, поэтому мы не можем сказать, равны ли функции.

expect(function aaa() {}).toEqual(function aaa() {}); // fails

Вы можете захотеть исключить методы перед явным сравнением или создать пользовательский сопоставитель , который сделает это за вас. Но гораздо лучше, если вы протестируете, какие функции выполняет вместо этого. В вашем случае у вас, вероятно, есть отдельный тест для ./reducer.js, верно? Вы можете просто присоединиться к обоим тестам: один тестовый редуктор изолированно и тот, который проверяет имена ключей объектов.

...