Ruby on rails 角度';s ngIf声明打破了水豚试验

Ruby on rails 角度';s ngIf声明打破了水豚试验,ruby-on-rails,angularjs,capybara,capybara-webkit,Ruby On Rails,Angularjs,Capybara,Capybara Webkit,向验证标记添加ngIf语句时,我的测试套件会中断 我有一个div,如果字段无效,它会显示错误消息。以前,这些错误在页面加载时显示。现在我只想在用户与输入字段交互后显示错误。添加一个ngIf语句似乎非常适合这样做,但它破坏了我的测试套件 这是完美的工作: <div data-ng-messages="userForm.name.$error"> <!-- some input field... --> </div> 这样的测试会变得不可靠 <

向验证标记添加
ngIf
语句时,我的测试套件会中断

我有一个div,如果字段无效,它会显示错误消息。以前,这些错误在页面加载时显示。现在我只想在用户与输入字段交互后显示错误。添加一个
ngIf
语句似乎非常适合这样做,但它破坏了我的测试套件

这是完美的工作:

<div data-ng-messages="userForm.name.$error">
    <!-- some input field... -->
</div>

这样的测试会变得不可靠

<div data-ng-messages="userForm.name.$error" data-ng-if="userForm.name.$touched">
    <!-- some input field... -->
</div>

例如,我的一个特性规范尝试填写表单、提交和重新加载页面,以查看这些值是否被持久化。此测试在没有
ngIf
语句的情况下运行良好,但现在页面在页面重新加载时具有旧的(未更新的)值。控制器方法甚至没有被调用(例如
userscoontroller#update
,如果它是一个更新表单)

宝石
  • rspec轨道3.4.2
  • 水豚2.7.1
  • 水豚网络工具包1.11.1
  • 数据库1.5.3
更新 将if语句更改为
userForm.name.$dirty
会使测试更频繁地通过。。。我猜这里引入了某种竞争条件,可能是因为$dirty响应速度更快,这将使测试更频繁地通过

更新2 我尝试过gem,它被描述为AngularJS与水豚的稳定集成测试。不幸的是,每次尝试使用webkit驱动程序访问页面时都会出现超时故障。我已经在该存储库的一个问题中描述了我的问题

更新3 在他的帮助下,我成功地通过了更多的测试。在我写这个问题之前,我读过它,但直到现在我才找到解决方案。其想法是隐藏页面中Angular应该显示数据的部分(好像水豚不知道应该等待Angular进行绑定)。这解决了我的一些问题,但这并不是最好的解决方案,因为它提供了更糟糕的用户体验(实际上,在加载页面时,您可以看到表单是隐藏的,然后在半秒钟或其他时间后它就会可见)

更新4 在gem的帮助下,我成功地通过了测试,不过我必须直接与Angular交互(比如
ng_model('model.attribute')。设置('value')
),才能让它工作。更优雅的解决方案是找到一种等待Angular进行绑定的方法