【发布时间】:2021-08-16 16:23:58
【问题描述】:
我有一个 ActiveAdmin 表单来创建一个新的 ActiveRecord 对象,并且该表单还能够为“主”模型的 has_many 关联之一创建记录,即:
class Car < ApplicationModel
has_many :tires
end
class Tire < ApplicationModel
belongs_to :car
end
# ... in ActiveAdmin "cars.rb" file...
ActiveAdmin.register Car do
...
form do |f|
f.semantic_errors
f.inputs 'Car' do
f.input :color
f.input :doors, as: :number
f.inputs do
f.has_many :tires, allow_destroy: true, new_record: true do |t|
t.input :type
t.input :size
end
end
end
f.actions
end
end
还有一些未在此处列出的控制器逻辑可以正确创建、编辑或销毁这些记录,包括 Cars 和 Tires。当表单呈现时(假设我正在创建一辆新车),底部有一个按钮,上面写着“添加新轮胎”。单击它会在页面上呈现一个子表单,其中包含两个字段:“类型”和“大小”。当我提交表单时,我已经设置了控制器来保存 Car 及其关联的轮胎。一切正常。
我正在努力进行自动化测试,以确保单击“添加新轮胎”按钮会导致子表单呈现。单击按钮后,我添加了一个断点并检查了page.body 以查看子表单是否存在,但它似乎不存在 - 我只看到按钮中的子表单模板(真的是a 元素)代码。这是我的测试代码中失败的部分:
click_link 'New Car'
fill_in('Color', with: 'Blue')
fill_in('Doors', with: 2)
click_link('Add New Tire') # Succeeds
fill_in('Type', with: 'All-Terrain') # Fails, can't find element
我尝试了其他方法来匹配第一个子表单字段,例如 xpath 和 css 选择器,但它无法找到该字段,就像我上面提到的那样,我没有看到如果我使用page.body 检查页面,则会呈现子表单。我被卡住了 - 谁能帮我弄清楚这里发生了什么?
【问题讨论】:
标签: ruby-on-rails rspec capybara activeadmin