2017-02-16 18 views
-1

Здравствуйте, я столкнулся с проблемой во время теста и только во время моего теста интеграции.Как я могу избежать Нахождение двух представлений одной коллекции

Найдено двух изображений той же коллекции: ClientPasswordPolicy.userCategoriesForProxyDuration;

В одном из моих доменов У меня есть следующая вещь:

Map<String, String> userCategoriesForProxyDuration 

, который преобразованная как:

userCategoriesForProxyDuration joinTable: 

мой тест выглядит так:

 Client client0 = Client.findByName('client0') 
     UserCategory userCategory = UserCategory.build(value:'TEST_GUILHERME') 

     Client client = Client.build(name: 'Monkey') 
     ClientPasswordPolicy policy = ClientPasswordPolicy.build(client:client) 

     client.save(flush:true) 

     policy.userCategoriesForProxyDuration = ["TEST_GUILHERME":"36"] 
     policy.addToUserCategoriesNeedApproval(userCategory) 
     policy.proxyEnabled = true 

     policy.save(flush:true,failOnError:true,insert:true) 

     User user = User.build(username: "Test1", password: "password", client: client0) 

     Team team = Team.build(name: 'myTeamMonkey', client: client, members: [user]) 

     ClientPasswordPolicy policy1 = ClientPasswordPolicy.build(client:Client.build(name:'Maria'),proxyApproverEmailAddress:'[email protected]') 
     Client client1 = Client.findByName('Maria') 
     Team team1 = Team.build(name: 'myTeamMaria1', client: client1, members: [user]) 

, но в строка, в которой я создаю вторую политику, я получаю ошибку, я делал некоторые попытки и для экзамена если я действительно хотел бы:

 ClientPasswordPolicy.findAll() 

два раза во второй раз будет получать ошибку в любом случае, та же ошибка. поэтому я боюсь, что я не знаю, почему политика не была очищена от транзакции и транзакция держится, поэтому я использую флеш после сохранения, даже если я использую сборку для создания своих доменов.

Я нашел некоторые вещи, как, во время проверки на ClientPasswordPolicy мы делаем такие вещи, как это:

userCategoriesForProxyDuration nullable: true, validator: { approvals, object -> 
     if(object.proxyEnabled && !approvals) { 
      return ['invalid.proxy.user.category.required'] 
     } 
     for (approval in approvals) { 
      if (!(approval.key in UserCategory.list().value)) { 
       return ['invalid.proxy.approval.userType'] 
      } 
      try { 
       Integer.parseInt(approval.value) 
      } catch (NumberFormatException e) { 
       return ['invalid.proxy.approval.duration'] 
      } 
     } 

И если я закомментировать не будет никаких проблем, я боюсь этого UserCategory.list() вызывает проблемы, но я не уверен, что с этим делать, я пытался использовать во время сохранения (validate: false) не будет работать.

+0

Пробуйте с помощью NewTransaction обо всех битах, вызывающих проблему - так что сохраните и, возможно, список – Vahid

+0

Я сделал это и работал, но замедлял приложение, потому что это часть проверки и обычно вы проверяете перед сохранением, так что вы открывая новую транзакцию, иногда GB не удаляет эту транзакцию в тот же момент, поэтому будет удерживать память – Galeixo

ответ

0

Решение, которое я нашел, это сохранение и очистка всего в тесте, потому что проверки, в которых проверка базы данных проверялась и возилась с спящим режимом.

Смежные вопросы