4

假设我有以下React组件:

import React from 'react'
import AppBar from 'material-ui/lib/app-bar'

class NavBar extends React.Component {
  render () {
    return (
      <div>
        <AppBar
          title='My NavBar Title'
        />
      </div>
    )
  }
}

export default NavBar

我想设置一个测试,以确保用户在渲染时看到一个material-ui AppBar ,为此使用TapeEnzymeNavBar

import NavBar from './NavBar'
import React from 'react'
import test from 'tape'
// import { I don't know exactly what to import here. Maybe `shallow`? } from 'enzyme'

test('NavBar component test', (assert) => {
  test('I should see an AppBar', (assert) => {
    // How can I test for it?
    // Also, can I test only for the presence of `AppBar`, without
    // necessarily for the overriding of props? For example,
    // even if I actually have <AppBar title='My NavBar title' />,
    // can I test only for `AppBar`?
    assert.end()
  })
  assert.end()
})

我怎样才能正确地做到这一点?

4

2 回答 2

16

我知道了。这是:

test('I should see one AppBar', (assert) => {
  const wrapper = shallow(<NavBar />)
  assert.equal(wrapper.find('AppBar').length === 1, true)
  assert.end()
})

shallow函数 fromenzyme返回一个具有方法的包装器findfind返回具有属性的对象length。如果我AppBar的组件中有两个 s,length则等于2,因此我可以对其进行测试=== 1以完成我的测试。

于 2016-02-10T09:58:59.300 回答
4

我没有使用胶带和酶,但根据我的理解,这个问题与 React 测试工具有关。

无论如何工具都有方法:https ://facebook.github.io/react/docs/test-utils.html#findallinrenderedtree

您可以使用它来查看组件是否像这样呈现:

const u = require('react-addons-test-utils');
const hasAppBar = u.findAllInRenderedTree(NavBar, (component) => {
   return u.isCompositeComponentWithType(component, AppBar);
});

只需确保 AppBar 确实是您正在搜索的组件的 displayName。

您将返回与谓词匹配的组件数组,因此您可以检查长度是否 > 0。

于 2016-02-10T08:09:01.620 回答