2017-01-03 3 views
7

Я написал простой Реагировать компонент, который визуализирует :Испытание содержание в <iframe> в React компонента с Enzyme

export class Iframe extends React.component { 
    render() { 
     return <iframe src={ this.props.src } />; 
    } 
} 

, и я стараюсь, чтобы проверить его, проверяя, что содержимое, загруженное с src является правильно заполненной в пределах . Для этого я пытаюсь получить доступ к frame.contentWindow, но после установки его с ферментом он всегда возвращает undefined.

Я пытался дразнить содержание с Синоне FakeXMLHttpRequest:

server = sinon.fakeServer.create(); 
server.respondWith('GET', 'test', [200, { 'Content-Type': 'text/html' }, '<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><body><div class="myClass">Amazing Unicorn</div></body></html>']); 
container = mount(<Iframe src='test' />); 

и с <iframe src='data:text/html' >:

const src = 'data:text/html;charset=utf-8,<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><body><div class="myClass">Amazing Unicorn</div></body></html>'; 
container = mount(<Iframe src={ src } />); 

, но в обоих случаях на тест с Энзим:

container = mount(<Iframe src='...' />); 
container.instance().contentWindow // equals 'undefined' 
container.find('iframe').contentWindow // equals 'undefined' 

Компонент работает и отображает, как ожидалось, на лбу ser при наличии действительного атрибута src. Есть ли способ получить доступ к contentWindow в тестах на реактивность с помощью фермента (или любой другой тестовой среды)?

+0

У меня такая же проблема, чтобы проверить его, нашли ли вы решение? –

+5

Вам нужно будет настроить фермент с помощью «рабочего» браузера. Не знаю, возможно ли это. Однако почему вы должны протестировать это? ИМХО этот тест бессмыслен, так как вы не будете тестировать свой код, но реагируете. Я думаю, вам нужно просто проверить, правильно ли передается «src» в качестве атрибута «src» iframe, который возможен с помощью фермента. – lipp

+0

contentWindow будет на самом деле null не undefined, после того, как вы получитеDOMNode() и проверьте свойство contentWindow. то, что вы проверили, это свойство contentWindow на ферментной обертке, а не iframe – maciejW

ответ

-1

Если вы пишете модульный тест (и я предполагаю, что это то, что вы делаете), вы должны проверить поведение, а не детали реализации.

Если бы я должен был написать тест для такого компонента, я бы использовать то вроде этого:

  • позитивный сценарий: Компонент визуализирует IFRAME Зачет src
  • негативный сценарий: компонент оказывает нулевой (в зависимости от бизнес-логика), если нет src, переданный в реквизитах

Этот тест обрабатывает как правильное, так и неправильное поведение. См. Defensive programming для более подробной информации.

Если мы говорим о реализации теста, я бы использовал метод Jest и toMatchSnapshot, чтобы проверить результат рендеринга в обоих сценариях.

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