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
userForm.name.$dirty
会使测试更频繁地通过。。。我猜这里引入了某种竞争条件,可能是因为$dirty响应速度更快,这将使测试更频繁地通过
更新2
我尝试过gem,它被描述为AngularJS与水豚的稳定集成测试。不幸的是,每次尝试使用webkit驱动程序访问页面时都会出现超时故障。我已经在该存储库的一个问题中描述了我的问题
更新3
在他的帮助下,我成功地通过了更多的测试。在我写这个问题之前,我读过它,但直到现在我才找到解决方案。其想法是隐藏页面中Angular应该显示数据的部分(好像水豚不知道应该等待Angular进行绑定)。这解决了我的一些问题,但这并不是最好的解决方案,因为它提供了更糟糕的用户体验(实际上,在加载页面时,您可以看到表单是隐藏的,然后在半秒钟或其他时间后它就会可见)
更新4
在gem的帮助下,我成功地通过了测试,不过我必须直接与Angular交互(比如ng_model('model.attribute')。设置('value')
),才能让它工作。更优雅的解决方案是找到一种等待Angular进行绑定的方法