如何测试 AJAX 在 rails 应用程序中加载的内容?
How to test content loaded by AJAX in rails app?
我有一个select,其内容是根据另一个select的select离子填充的。
我亲自使用验证了它是有效的。但是,我无法对其进行测试。
这是我的测试:
@javascript
When(/^I submit the form$/) do
page.select @professor.name, from: 'Professor'
page.fill_in 'title', with: "Test"
page.fill_in 'content', with: "Test"
sleep 5.seconds
binding.pry
page.click_button 'Submit'
end
在pry session中,当我用page.find('#course').text
查询select框的内容时returns ""
。在测试中,未加载 select 框中的内容。
javascript很简单:
$(document).ready(function() {
$('#professor').on('change', function() {
id = $(this).find('option:selected').val();
path = window.location.origin + '/professors/' + id + '/courses';
$.ajax(path, {
success: function(data, textStatus, jqXHR) {
$('#course').empty();
data.forEach(function(course) {
$('#course').append(
'<option value=' + course.id + '>'
+ course.identifier + ': ' + course.name
+ '</option>'
);
});
}
});
});
});
在 ajax 测试中使用 sleep 是不可靠的。它会使您的测试套件变慢,并且不能保证它无论如何都会工作。
查看这篇文章https://robots.thoughtbot.com/automatically-wait-for-ajax-with-capybara
您应该检查页面是否存在所需元素的想法,如果它不存在,那么您应该再次等待一段时间(但不是 5 秒!)
我有一个select,其内容是根据另一个select的select离子填充的。
我亲自使用验证了它是有效的。但是,我无法对其进行测试。
这是我的测试:
@javascript
When(/^I submit the form$/) do
page.select @professor.name, from: 'Professor'
page.fill_in 'title', with: "Test"
page.fill_in 'content', with: "Test"
sleep 5.seconds
binding.pry
page.click_button 'Submit'
end
在pry session中,当我用page.find('#course').text
查询select框的内容时returns ""
。在测试中,未加载 select 框中的内容。
javascript很简单:
$(document).ready(function() {
$('#professor').on('change', function() {
id = $(this).find('option:selected').val();
path = window.location.origin + '/professors/' + id + '/courses';
$.ajax(path, {
success: function(data, textStatus, jqXHR) {
$('#course').empty();
data.forEach(function(course) {
$('#course').append(
'<option value=' + course.id + '>'
+ course.identifier + ': ' + course.name
+ '</option>'
);
});
}
});
});
});
在 ajax 测试中使用 sleep 是不可靠的。它会使您的测试套件变慢,并且不能保证它无论如何都会工作。
查看这篇文章https://robots.thoughtbot.com/automatically-wait-for-ajax-with-capybara
您应该检查页面是否存在所需元素的想法,如果它不存在,那么您应该再次等待一段时间(但不是 5 秒!)