Проблема заключается в том, что .NET, чтобы разрешить выполнение некоторых типов неявных операций с участием float
и double
, необходимо либо явно указать, что должно произойти во всех сценариях, связанных с смешанными операндами, либо разрешить неявные конверсии между типами, которые должны выполняться только в одном направлении; Microsoft предпочла следовать примеру Java, позволяя направление, которое иногда способствует точности, но часто жертвует правильностью и обычно создает неприятности.
Почти во всех случаях значение double
, которое ближе всего к определенному числовое значение и присвоение его float
даст значение float
, которое будет ближе всего к той же самой величине. Существует несколько угловых случаев, таких как значение 9 007 199 691 611 905; наилучшее представление float
будет равно 9 007 200 328 482 816 (что не соответствует 536 870 911), но отличное представление double
(т.е. 9 007 199 691 611 904) к float
дает 9 007 199 254 740 992 (что на 536 870 913). В общем случае преобразование наилучшего double
представления некоторой величины в float
либо даст наилучшее возможное представление float
, либо одно из двух представлений, которые по существу одинаково хороши.
Заметим, что это желательное поведение распространяется даже на крайности; например, наилучшее представление float
для величины 10 ^ 308 соответствует представлению float
, достигаемому путем преобразования наилучшего double
представления этой величины. Аналогично, наилучшее представление float
10 ^ 309 соответствует представлению float
, достигаемому путем преобразования наилучшего double
представления этой величины.
К сожалению, преобразования в направлении, которое не требует явное приведение редко встречается почти точно. Преобразование наилучшего представления float
значения в double
редко приведет к чему-либо, особенно близкому к наилучшему double
представлению этого значения, и в некоторых случаях результат может быть отключен на сотни порядков (например, преобразование Лучшее float
представление от 10 ^ 40 до double
даст значение, которое сравнивается больше, чем лучшее double
представление 10 ^ 300.
Увы, правила преобразования - это то, что они есть, поэтому нужно жить с использованием глупых приемов и суффиксов при преобразовании значений в «безопасном» направлении и будьте осторожны с неявными приведениями в опасном направлении, которые часто дают фиктивные результаты.
Если вы тестируете компонент без подключения HOC. Тогда вы никогда не увидите реквизиты из mapStateToProps, поскольку импортированный вами компонент не запускает функцию соединения.
Вам нужно будет импортировать подключенный компонент, а затем обернуть его в провайдере. wrapper
должен иметь все необходимое.
-
Редактировать: Если нет возможности получить доступ к подключенному компоненту, просто используйте компонент и объявите все реквизиты вручную.
Примерно так:
import { Foo } from '../foo';
const props = {
title: 'Hello',
subTitle: 'World'
};
describe('<Foo />', () => {
test('should make props available', () => {
const wrapper = mount(<Foo {...props} />);
expect(wrapper.props).toEqual(props);
});
});