29

It seems like when I call getMessage on a thrown AuraHandledException, I see "Script-thrown Exception" instead of the message that I have set. Any idea why this may be happening?

Controller:

    @AuraEnabled
    public static Conversation__c makeConversation(String tonum, String objid)
    {
        if (tonum.length() != 10)
            throw new AuraHandledException('ToNumber length invalid.');
    }

TestController:

@isTest
    static void testMakeConversationInvalidTo()
    {
        Boolean testPass = false;
        String fromNumber = '1234567890';
        String toNumber = '1';

        List<ConversationController.ConversationWrapper> test =    ConversationController.getConversations();
        System.assertEquals(0, test.size());
        try {
            ConversationController.makeConversation(toNumber, '0');
        } catch (AuraHandledException e) {
            System.debug(e.getMessage());
            System.debug(e.getTypeName());
            System.assert(e.getMessage().contains('ToNumber length invalid'));
            testPass = true;
        }
    }

Return:

16:26:28:477 USER_DEBUG [320]|DEBUG|Script-thrown exception
16:26:28:477 USER_DEBUG [321]|DEBUG|System.AuraHandledException
  • One observation here is that your controller isn't set up to return anything back to the Aura Client Side of things. Try at least returning "this" or something similar. If you look a the docs there's a return set-up for the method. I don't see anything similar in your class to do that. – crmprogdev May 22 '16 at 20:46
  • @crmprogdev : the full controller does have return data, I left it out in this question as it is irrelevant. – Jason Lee May 23 '16 at 5:49
  • 1
    @JasonLee - Can you add debugs in your controller to check on which line is it throwing the exception. – Sneha May 23 '16 at 9:08
  • @JasonLee Other than telling you to add more debug statements to your code to confirm what is happening, I don't think anyone can help you unless you post more of your code. You've not provided sufficient code to reproduce the problem with your controller. If you want answer you'll find helpful, I'd urge you to post more of your code. If this didn't have a bounty on it, I'd be inclined to vote to close your question. – crmprogdev May 23 '16 at 11:09
54
+50

The problem is that the constructor for the AuraHandledException only sets the string argument to be the message sent to the client-end, while calling getMessage() on the exception through apex returns a different string that the constructor defaults to the value "Script-thrown Exception". Obviously, this leaves something to be desired for testing purposes, and I would suggest also adding the message to the exception with setMessage() so that it can be accessed through apex:

@AuraEnabled
public static void makeConversation(String tonum, String objid)
{
    if (tonum.length() != 10){
        AuraHandledException e = new AuraHandledException('ToNumber length invalid');
        e.setMessage('ToNumber length invalid');
        system.debug(e);
        throw e;
    }
}
  • Thank you, this definitely solves my issue, I did not know AuraHandledExceptions behaved like that.. – Jason Lee May 23 '16 at 20:20
  • No problem. I agree that it is a bit counter-intuitive that there are different error messages for the client and server. – martin May 24 '16 at 12:11
  • Does anyone know the "why" behind this behavior? It seems like there must be a reason it is implemented like this but I cannot figure out why that would be. – dsharrison Jul 19 '17 at 16:40
  • My thinking is that the 'throw' exception when not saved to a variable is intended only to kick the error immediately back to the client. When we are testing there is no client so we are dealing in system messages only. Saving the exception to a variable gives the system message something to pass back to the test class rather than a generic system exception. – binaryLady Dec 15 '17 at 15:51
  • I encountered the exact same issue today and this thread resolved my puzzle! – Xi Xiao Dec 27 '18 at 19:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.