функциональный тест в playframework не выполняется при добавлении товаров в корзину - PullRequest
2 голосов
/ 29 сентября 2011

Я написал функциональный тест для проверки добавления товаров в корзину. Чтобы пользователь мог добавлять товары в корзину, ему необходимо войти в систему. Итак, я создал метод для входа в систему пользователя и еще один метод для добавленияItem.Before и после метода addtocart в тесте, я проверяю размер содержимого корзины. Функциональность addtocart работает без каких-либо проблем, когда я запускаю приложение в режиме разработки (я тоже могу проверить БД, которая является postgres, а нев памяти db). addtocart не проходит тестированиеЯ получаю это

BEFORE ADD::usercart=48 has :0 items
addItemsToCart():BEFORE ADD cart=48 has=0
Controller::addItemToCart()::cart id=48 has=1 items
addItemsToCart():AFTER ADD cart=48 has=0
AFTER ADD::usercart=48 has :0 items

Здесь, в методе контроллера, экземпляр корзины (с id = 48) имеет 1 элемент после его сохранения в db. Но в методе теста экземпляр корзины с тем же идентификаторомимеет 0 содержимого.

Я закомментировал метод assertFalse и извлек корзину из db с помощью cartId. Даже тогда корзина с тем же идентификатором имеет 0 содержимого. Я не могу понять, почему это происходит .. может кто-нибудьшнемного света?

// тело метода испытаний .. модифицированное

ShopCart cart = ShopCart.findById(usercart.id);
System.out.println("AFTER ADD::cart="+cart.id+" has :"+cart.cartItems.size()+" items");        
assertFalse(cart.cartItems.size()==0);//why does this fail?

Ответы [ 3 ]

3 голосов
/ 29 сентября 2011

Сбой, потому что экземпляр корзины, используемый вашим методом тестирования, и экземпляр корзины, используемый методом addItemToCart, различаются. Каждая транзакция имеет свой собственный экземпляр объекта. А JPA не обновляет объект автоматически, когда какая-либо другая транзакция обновляет строку, отображаемую этим объектом.

Вы должны перезагрузить корзину из базы данных после вызова addItemsToCart, чтобы проверить, было ли что-то добавлено в корзину в базе данных.

0 голосов
/ 05 февраля 2012

У меня была та же проблема, и добавление JPA.em (). Clear () в моем тесте до того, как я получил модель из базы данных, решило эту проблему для меня.

0 голосов
/ 29 сентября 2011

Я раб объектно-ориентированного мышления, так что мне интересно, вы думали о том, чтобы сделать addItemsToCart() методом вашего ShopCart класса?Я предполагаю что-то вроде:

...
ShopCart usercart = new ShopCart(user);
usercart.addItemsToCart(pdt);
usercart.save();

String addtocarturl = "/items/addtocart/"+pdt.id.toString();
Response response = POST(addtocarturl,addtocartParams);
return response;

Мне просто легче подумать о создании (или получении) объекта ShopCart, его изменении и помещении в базу данных.Вот как бы мне этого избежать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...