2016-08-12 2 views
0

У меня есть SFC, который я тестирую с использованием мелкого рендеринга фермента. Я передаю объект стиля со встроенными стилями как опоры для этого компонента без гражданства. Однако, когда я применяю к нему единичный тест, он возвращает undefined. Я не уверен, что это нормально, поскольку я понимаю, что этот компонент просто возвращает все, что передается ему как реквизит, и поскольку ничего не передано/не передано, оно дает мне неопределенное. Есть ли обходной путь для этого?Enzyme: Функциональный компонент без учета состояния возвращает неопределенные реквизиты

const LoginForm = ({ style, handleSubmit }) => { 
    return (
    <form onSubmit={handleSubmit}> 
     <div style={_.get(style, 'container')}> 
     {inputFields} 
     </div> 
    </form> 
); 
}; 

Тест:

it('should apply styles to first div',() => { 
     const wrapper = shallow(<LoginForm style={{display: 'inline'}}/>); 
     expect(wrapper.find('div').first().prop('style')).to.eql({display: 'inline'}); 
     }); 
+1

Не могли бы вы опубликовать тестовый код блока, а? –

+0

@MichaelParker Обновлено – Umair

ответ

1

Там есть несколько причин, почему это не удастся.

Во-первых, похоже, что вы неправильно используете API-интерфейс фермента.

Если вы хотите получить конкретную опору из мелкой обертки, вам необходимо использовать .props() (другими словами, вы забыли «s»).

wrapper.find('div').first().props('style') 

Однако даже при такой коррекции, ваш тест по-прежнему терпит неудачу, потому что в тесте, вы передаете {display: 'inline'} как style опоры, но вы ищете недвижимость под названием container в вашей реализации. Я предполагаю, что вы используете lodash.get, который gets the value at the path of an object. Поскольку объект вы подача не имеет container свойства, style подпирать DIV будет равен {style: undefined} и тест проваливается при попытке сравнить это {display: 'inline'}

+0

Это действительно решение. Я действительно сумел понять это, но это правильно, поэтому я буду отмечать это как ответ. Спасибо. – Umair

+0

И еще одна вещь: '.prop (key)' работает также. Это в документах. https://github.com/airbnb/enzyme/blob/master/docs/api/ShallowWrapper/prop.md – Umair

+0

Да, я этого не знал. Интересно, почему он не работал для меня, когда я скопировал ваш код и попробовал его. Спасибо за информацию, хотя! –

Смежные вопросы