当我为表单的功能测试运行bundle exec rspec
时出现以下错误:
Failure/Error: select('Boston Commons - Vacation English', :from => 'school_application_program')
Capybara::ElementNotFound:
Unable to find option "Boston Commons - Vacation English"
以下是我的功能规范中的方案片段:
select('Boston Commons', :from => 'school_application_fls_center')
select('Boston Commons - Vacation English', :from => 'school_application_program')
第二行失败。
在我的开发环境中,我访问场景访问的相同路线,
执行上一个选择,然后确认school_application_program
是<select>
标记的ID,并且选项名称与我正在检查的名称完全相同。
我的唯一猜测是,由于某种原因,我的javascript onchange
功能无法正确填充<select>
标记,但鉴于该功能,这并没有多大意义spec应该完全反映开发环境。
onchange事件被绑定到紧接<select>
之前的school_application_program
标记,并重置school_application_program
的选项
以下是填充school_application_program
<select>
$("#school_application_fls_center").change(function(){
var center_id = document.getElementById("school_application_fls_center").value;
var formdata = {center: center_id};
$.ajax({
url: "/application/get_programs_for_center",
type: "POST",
datatype: 'json',
data: formdata,
success: function(response){
var options = $("#school_application_program");
removeOptions(document.getElementById("school_application_program"));
$.each(response.programs, function(i,item) {
options.append($("<option />").val(response.programs[i].id).text(response.programs[i].name));
});
}
});
});
这是我的开发环境中的一个镜头,在我完成规范手动完成的行为后,在测试失败时显示表单。
答案 0 :(得分:0)
所需要的只是在定义:js => true
时通过添加scenario
标志来启用Javascript,如下所示:
scenario 'happy path that uses AJAX', :js=>true do
#etc.
end