2016-06-07 62 views
3

我正在测试反应组件,并需要模拟组件内特定元素的单击。我不想仅仅为了测试而添加id,有没有办法通过文本选择这个元素?通过来自React组件的文本选择DOM元素

const ReactTestUtils = require('react-test-utils'); 
const Sidebar = require('components/sidebar'); 

describe('clicking on More button', function() { 
    it('triggers analytics event', function() { 
    const component = renderComponent(<Sidebar policyPreferences={ this.policyPreferences } />); 

    const moreButton = component.getDOMElementByText('More'); // <- I need something like this 
    ReactTestUtils.Simulate.click(moreButton); 

    expect(analytics.track).toHaveBeenCalled(); 
    } 
} 
+0

你可以写一个使用.innerHTML() –

+0

感谢@ChrisWissmach功能。任何想法如何使用'.innerHTML()'选择该元素? –

回答

4

通过所有元素以下功能重复,直到它找到一个与匹配的文本:

function getElementByText(text){ 
    var all = document.getElementsByTagName("*"); 

    for (var i=0, max=all.length; i < max; i++) { 
     if (all[i].innerHTML == text){ 
      return all[i]; 
     } 
    } 
    return null; 
}