Неработает:
@isTest
static void lostStageTest() {
MCD_Opportunity_Close_New_Controller controller = validInit();
System.assert(!ApexPages.hasMessages(), 'No errors should be so far');
controller.status = 'Closed Lost';
controller.getCompetitors(); // is invoked when it is shown on a closure page
controller.submit();
System.assert(ApexPages.hasMessages(), 'The page should display a bunch of errors');
System.assertEquals('None', controller.winnerId);
System.debug(LoggingLevel.ERROR, '\n\n\n --- lostStageTest ---'
+'\n - ApexPages.getMessages(): ' + ApexPages.getMessages().size()
+'\n - ApexPages.getMessages(): ' + ApexPages.getMessages()
+'\n'
);
// all fields are properly set here
controller.submit();
System.debug(LoggingLevel.ERROR, '\n\n\n --- lostStageTest - 2 ---'
+'\n - ApexPages.getMessages(): ' + ApexPages.getMessages().size()
+'\n - ApexPages.getMessages(): ' + ApexPages.getMessages()
+'\n'
);
System.assert(!ApexPages.hasMessages(), 'The page should NOT display any error');
}
@isTest
static void lostStageTest() {
MCD_Opportunity_Close_New_Controller controller = validInit();
System.assert(!ApexPages.hasMessages(), 'No errors should be so far');
controller.status = 'Closed Lost';
controller.getCompetitors(); // is invoked when it is shown on a closure page
/*controller.submit();
System.assert(ApexPages.hasMessages(), 'The page should display a bunch of errors');
System.assertEquals('None', controller.winnerId);*/
System.debug(LoggingLevel.ERROR, '\n\n\n --- lostStageTest ---'
+'\n - ApexPages.getMessages(): ' + ApexPages.getMessages().size()
+'\n - ApexPages.getMessages(): ' + ApexPages.getMessages()
+'\n'
);
// all fields are properly set here
controller.submit();
System.debug(LoggingLevel.ERROR, '\n\n\n --- lostStageTest - 2 ---'
+'\n - ApexPages.getMessages(): ' + ApexPages.getMessages().size()
+'\n - ApexPages.getMessages(): ' + ApexPages.getMessages()
+'\n'
);
System.assert(!ApexPages.hasMessages(), 'The page should NOT display any error');
}
Т.е. поля я позже правильно назначаю и все нормально отрабатывает. Но вот, если первый раз я не выставил поля, то появляются сообщения с ошибками. Хорошо. Но когда все выставил, то они НЕ ИСЧЕЗАЮТ.
В какой момент СФ их сбрасывает? Как мне их в тесте сбросить?
ApexPages.getMessages().clear(); - неработает
Add support for clearing PageMessages via Apex
ну наверное для начала стоит использовать test.StartTest() и test.StopTest()
Как это должно помочь?
А есть вообще способ очистить очередь ApexPages.Message? Насколько я помню (тоже сталкивался с этой задачей) такой возможности нет и в IdeaExchange есть только предложения с добавлением этого функционала в Salesforce.
Когда я делал, то в тестах приходилось просто создавать новые тест методы чтобы протестировать новые состояния, потому что если в коде добавил ApexPages.Message то через apex очередь не очистишь.
Вот я переделал это метод. И другой, который, все ошибки проверял, т.к. я не уверен, что там все правильно проходит, ибо все ошибки свалились и не вываливаются. Ну и проверки будут всегда проходить, т.к. я проверяю только НАЛИЧИЕ определенной ошибки и не проверяю ОТСУТСТВИЕ других.
Чисто из любопытства - а какая, по-вашему, страница находится в контексте выполнения этого теста? По-моему вы забыли Test.setCurrentPage вызвать.