Action cable,ReactJS 更新失败 Capybara 规范
Action cable, ReactJS update fails Capybara spec
我正在测试 Rails 5,几乎每个请求都使用动作电缆。 UI 使用使用 JSON 对象更新的 reactjs 组件。
当我编写更新列表的测试时,即使我可以断言数据库已更新,它也无法断言它已在视觉上更新。如果我手动测试它(点击测试)一切正常。
这是我的代码示例:
https://github.com/instatodo/instatodo/blob/master/spec/features/todos_spec.rb
描述 "Update task completed state" 做
在 { 访问 todo_path(todo_with_tasks) }
之前
it "modifies task state" do
within first(".task") do
find(".task-completed").click
sleep 1
expect(page).to have_checked_field(".task-completed") # This fails
end
expect(Task.where(completed: true)).not_to be_nil # This passes
end
结束
反应组件:
https://github.com/instatodo/instatodo/blob/master/app/assets/javascripts/components/task.jsx
关于为什么这不起作用的任何想法?
谢谢!
have_checked_field
采用复选框元素的 id、名称或相关标签文本 - 它不采用 CSS 选择器。如果您没有要使用的 ID、名称或标签文本,并且只有一项带有 task-completed
class,那么您应该能够将您的期望重写为
expect(page).to have_css('.task-completed:checked')
我正在测试 Rails 5,几乎每个请求都使用动作电缆。 UI 使用使用 JSON 对象更新的 reactjs 组件。
当我编写更新列表的测试时,即使我可以断言数据库已更新,它也无法断言它已在视觉上更新。如果我手动测试它(点击测试)一切正常。
这是我的代码示例:
https://github.com/instatodo/instatodo/blob/master/spec/features/todos_spec.rb
描述 "Update task completed state" 做 在 { 访问 todo_path(todo_with_tasks) }
之前it "modifies task state" do
within first(".task") do
find(".task-completed").click
sleep 1
expect(page).to have_checked_field(".task-completed") # This fails
end
expect(Task.where(completed: true)).not_to be_nil # This passes
end
结束
反应组件:
https://github.com/instatodo/instatodo/blob/master/app/assets/javascripts/components/task.jsx
关于为什么这不起作用的任何想法? 谢谢!
have_checked_field
采用复选框元素的 id、名称或相关标签文本 - 它不采用 CSS 选择器。如果您没有要使用的 ID、名称或标签文本,并且只有一项带有 task-completed
class,那么您应该能够将您的期望重写为
expect(page).to have_css('.task-completed:checked')