这是我通过复选框进行编辑操作的规范。 Preference
有许多Regions
(实际上是很多;关系正常),并且复选框应在首选项中添加或删除区域。
这是规格:
it "saves updated regions when the button is clicked" do
uncheck "preference_region_ids_#{afr.id}"
check "preference_region_ids_#{asia.id}"
click_button "Save"
expect(pref.regions).to_not include afr
expect(pref.regions).to include asia
afr_box = page.all("#preference_region_ids_#{afr.id}").first
expect(afr_box.checked?).to eq false
asia_box = page.all("#preference_region_ids_#{asia.id}").first
expect(asia_box.checked?).to eq true
end
这是控制器的更新方法:
def update
@prefs.update(pref_params)
add_home_airport(params) if params[:preference][:home_airport]
delete_vacations(pref_params) if pref_params[:vacations_attributes]
redirect_to preferences_path
end
当我在浏览器中测试功能时,它可以工作。正确修改了区域,并正确选中了重定向页面上的复选框。
运行规范时,如果我在update
操作的末尾撬入,则说明它已正常运行。但是,该规范失败。如果我刚好在期望值之前(在单击“保存”按钮之后)撬开该规格,则我发现regions
阵列已添加了Asia而不是删除Africa,即使刚才,从控制器中撬动表明它可以正常工作正确。
这是怎么回事?