我正在执行一项运行功能性使用“点击添加”功能的测试。 为用户提供了一个项目表,允许他们单击“添加”按钮将项目添加到他们的购物车。
按钮执行ajax调用以将项目附加到用户的购物车。成功添加项目后,该项目将显示在购物车UI中。 Cart UI本质上是另一个表。
//pseudo code
$('.addButton').on('click', function (event) {
$.ajax({
url:...,
success: updateCart
});
});
function updateCart (data) {
// use data to create tr_fragment
$("#cart-ui-target").append(tr_fragment); //new row
}
我在then
语句中尝试的是使用waitFor,直到#cart-ui-target
的{{1}}大小大于或等于1:
<tr>
但是,每隔一段时间,测试就会失败并出现以下异常:
waitFor(5) {$('#cart-ui-target').find('tr').size() >= 1}
我甚至试图以2秒的间隔将waitFor时间增加到10秒,但它仍然不起作用:
geb.waiting.WaitTimeoutException: condition did not pass in 5.0 seconds (failed with exception)
我可以做些什么来使这更好地等待并防止零星的失败?
更新 这就是我在phantomjs的日志信息中看到的。
waitFor(10, 2) {$('#cart-ui-target').find('tr').size() >= 1}
答案 0 :(得分:0)
我认为您试图测试JavaScript行为,而不是添加到购物车本身(可能是在后端逻辑中测试过的?)。
我认为要走的路是模拟$ .ajax并使用fixture数据从模拟中调用回调。如果您使用茉莉花,这可以看起来像这样:
it('should add something when something is succesfully addes', function() {
data = 'data_for_callback_here';
spyOn($, 'ajax').andCallFake(function(data) { data.success(data); } );
$('.addButton').click();
expect() // Expect something
});