我正在执行一个测试,该测试运行“单击添加”功能的功能使用。给用户一个条目表,允许用户单击“添加”按钮将项目添加到他们的购物车中。
该按钮执行ajax调用,将项目附加到用户的购物车中。当成功添加项时,该项将显示在Cart 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的<tr>大小大于或等于1:
waitFor(5) {$('#cart-ui-target').find('tr').size() >= 1}但是,除了以下例外,每次测试都会失败:
geb.waiting.WaitTimeoutException: condition did not pass in 5.0 seconds (failed with exception)我甚至尝试在2秒间隔内将waitFor时间增加到10秒,但仍然无法工作:
waitFor(10, 2) {$('#cart-ui-target').find('tr').size() >= 1}我怎样才能更好地等待和防止零星的失败呢?
更新--这是我在幻影的日志信息中看到的。
$('#cart-ui-target').find('tr').size()
| | |
| [] 0
[[[[[PhantomJSDriver: phantomjs on LINUX (113358b0-7bf1-11e4-a10e-9f2b2537fa31)] -> tag name: html]] -> css selector: #cart-ui-target]]发布于 2014-12-04 16:26:36
我认为您试图测试的是JavaScript行为,而不是购物车本身的添加(可能是在后端逻辑中测试的?)。
我认为要走的路是模拟$.ajax,并使用夹具数据从模拟中调用回调。如果您使用茉莉花,这可以看上去如下:
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
});https://stackoverflow.com/questions/27298350
复制相似问题