Reactjs 如何用酶和摩卡测试内存器中安装的元件的错误状态

Reactjs 如何用酶和摩卡测试内存器中安装的元件的错误状态,reactjs,meteor,react-router,mocha.js,enzyme,Reactjs,Meteor,React Router,Mocha.js,Enzyme,我想用酶挂载测试React组件的错误状态。即使设置了状态,也不会显示错误 这是React组件的渲染方法 render() { return ( <div> <div> <h1>Signup</h1> {this.state.error ? <p>{this.state.error}</p> : undefined} &l

我想用酶挂载测试React组件的错误状态。即使设置了状态,也不会显示错误

这是React组件的渲染方法

  render() {

    return (
      <div>
        <div>
          <h1>Signup</h1>

          {this.state.error ? <p>{this.state.error}</p> : undefined}

          <form onSubmit={this.onSubmit}>
            <input type="text" ref="username" name="username" placeholder="Username"/>
            <input type="email" ref="email" name="email" placeholder="Email"/>
            <input type="password" ref="password" name="password" placeholder="Password"/>
            <button>Create Account</button>
          </form>

          <p><Link to="/login">Already have an account?</Link></p>
        </div>
      </div>
    )

  }
render(){
返回(
报名
{this.state.error?{this.state.error}

:未定义} 创建帐户 已经有账户了吗

) }
这是用摩卡咖啡和酶做的测试

    it('should show error message', function () {

      const error = 'This is not working'
      const spy2 = expect.createSpy()

      const wrapper2 = Enzyme.mount(
        <MemoryRouter>
          <Signup
            createUser={spy2}
          />
        </MemoryRouter>
      )

      // Access Signup Component inside Memory Router
      const component = wrapper2.find(Signup)

      component.setState({error})
      expect(component.find('p').first().text()).toBe(error)
    })
it('应显示错误消息',函数(){
常量错误='这不起作用'
const spy2=expect.createSpy()
const wrapper2=Enzyme.mount(
)
//内存路由器内部的访问注册组件
const component=wrapper2.find(注册)
组件.setState({error})
expect(component.find('p').first().text()).toBe(错误)
})

我希望错误段落的文本与设置错误状态消息匹配

我不确定从
setState
render
到更新虚拟DOM的转换是阻塞还是非阻塞。如果它是非阻塞的,那么您可能调用
expect
只是“太早”,组件被标记为脏组件,可能还没有渲染,或者DOM还没有更新?也许有帮助?如果您在几毫秒后使用
setTimeout
调用
expect
,它会工作吗?我不确定从
setState
render
到更新虚拟DOM的转换是阻塞还是非阻塞。如果它是非阻塞的,那么您可能调用
expect
只是“太早”,组件被标记为脏组件,可能还没有渲染,或者DOM还没有更新?也许有帮助?如果使用
setTimeout
在几毫秒后调用
expect
,它会工作吗?