我有一个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),底部有一个按钮,上面写着"添加新轮胎"。单击它将在页面上呈现一个带有两个字段的子表单:"Type"one_answers";Size"。我已经设置了控制器,以便在提交表单时保存Car及其关联的Tires。
我正在努力进行一个自动化测试,以确保单击"添加新轮胎"按钮使子表单呈现。我在单击按钮并检查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
检查页面,我没有看到呈现子表单的实例。我被卡住了,谁能帮我弄清楚这是怎么回事?
我得到一个提示,将js: true
添加到测试定义中可能会有所帮助,并且事实证明,它确实如此:
RSpec.describe Car, js: true do
...
end