Неработает:
@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');
}
Т.е. поля я позже правильно назначаю и все нормально отрабатывает. Но вот, если первый раз я не выставил поля, то появляются сообщения с ошибками. Хорошо. Но когда все выставил, то они НЕ ИСЧЕЗАЮТ.
В какой момент СФ их сбрасывает? Как мне их в тесте сбросить?
Неработает: [code] @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'); }[/code] Работает: [code] @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'); }[/code] Т.е. поля я позже правильно назначаю и все нормально отрабатывает. Но вот, если первый раз я не выставил поля, то появляются сообщения с ошибками. Хорошо. Но когда все выставил, то они НЕ ИСЧЕЗАЮТ. В какой момент СФ их сбрасывает? Как мне их в тесте сбросить?
ApexPages.getMessages().clear(); - неработает
Add support for clearing PageMessages via Apex
ApexPages.getMessages().clear(); - неработает [url=https://success.salesforce.com/ideaView?id=08730000000ZLADAA4]Add support for clearing PageMessages via Apex[/url]
ну наверное для начала стоит использовать test.StartTest() и test.StopTest()
[quote="Chiz"]ApexPages.getMessages().clear(); - неработает[/quote] ну наверное для начала стоит использовать test.StartTest() и test.StopTest()
[quote="wilder"]для начала стоит использовать test.StartTest() и test.StopTest()[/quote]Как это должно помочь?
А есть вообще способ очистить очередь ApexPages.Message? Насколько я помню (тоже сталкивался с этой задачей) такой возможности нет и в IdeaExchange есть только предложения с добавлением этого функционала в Salesforce.
Когда я делал, то в тестах приходилось просто создавать новые тест методы чтобы протестировать новые состояния, потому что если в коде добавил ApexPages.Message то через apex очередь не очистишь.
А есть вообще способ очистить очередь ApexPages.Message? Насколько я помню (тоже сталкивался с этой задачей) такой возможности нет и в IdeaExchange есть только предложения с добавлением этого функционала в Salesforce. Когда я делал, то в тестах приходилось просто создавать новые тест методы чтобы протестировать новые состояния, потому что если в коде добавил ApexPages.Message то через apex очередь не очистишь.
Вот я переделал это метод. И другой, который, все ошибки проверял, т.к. я не уверен, что там все правильно проходит, ибо все ошибки свалились и не вываливаются. Ну и проверки будут всегда проходить, т.к. я проверяю только НАЛИЧИЕ определенной ошибки и не проверяю ОТСУТСТВИЕ других.
[quote="Dmitry Shnyrev"]А есть вообще способ очистить очередь ApexPages.Message? Насколько я помню (тоже сталкивался с этой задачей) такой возможности нет и в IdeaExchange есть только предложения с добавлением этого функционала в Salesforce. Когда я делал, то в тестах приходилось просто создавать новые тест методы чтобы протестировать новые состояния, потому что если в коде добавил ApexPages.Message то через apex очередь не очистишь.[/quote] Вот я переделал это метод. И другой, который, все ошибки проверял, т.к. я не уверен, что там все правильно проходит, ибо все ошибки свалились и не вываливаются. Ну и проверки будут всегда проходить, т.к. я проверяю только НАЛИЧИЕ определенной ошибки и не проверяю ОТСУТСТВИЕ других.
Чисто из любопытства - а какая, по-вашему, страница находится в контексте выполнения этого теста? По-моему вы забыли Test.setCurrentPage вызвать.
Чисто из любопытства - а какая, по-вашему, страница находится в контексте выполнения этого теста? По-моему вы забыли Test.setCurrentPage вызвать.