-
-
Save olgaloza/b08ee5e061ca620e744a186ae7b65e1f to your computer and use it in GitHub Desktop.
@isTest | |
private class TestRestrictContactByName { | |
@isTest static void testInvalidName() { | |
//try inserting a Contact with INVALIDNAME | |
Contact myConact = new Contact(LastName='INVALIDNAME'); | |
insert myConact; | |
// Perform test | |
Test.startTest(); | |
Database.SaveResult result = Database.insert(myConact, false); | |
Test.stopTest(); | |
// Verify | |
// In this case the creation should have been stopped by the trigger, | |
// so verify that we got back an error. | |
System.assert(!result.isSuccess()); | |
System.assert(result.getErrors().size() > 0); | |
System.assertEquals('Cannot create contact with invalid last name.', | |
result.getErrors()[0].getMessage()); | |
} | |
} |
I know this is old but I am trying to learn this content and I'm confused---I passed the challenge but when I run the tests in the Developer Console the tests say that they fail:
System.DmlException: Insert failed. First exception on row 0; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, The Last Name "INVALIDNAME" is not allowed for DML: []
Obviously I was expecting the issue with the "INVALIDNAME" but I would expect that the test would succeed because I was testing for the failure. I am worried that if I were to try to deploy this code that I wouldn't be able to because the Apex tests would fail.
Thoughts? Thanks so much.
Remove line 7, "insert myConact;". That is causing the issue you are seeing with the test failing. The db insert between test.start/test.stop, will save the result and then the assertions will pass, and the test will run successfully.
Just reporting a silly mistake I made. Wanted to post this here in case anybody else makes the same mistake I did.
I was getting the error:
System.DmlException: Insert failed. First exception on row 0; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, The Last Name "INVALIDNAME" is not allowed for DML
and found that I was missing the false
argument in the Database.insert()
statement (line 11).
Have you put INVALIDNAME inside single quotes for validation?
if you do this:
Contact contact= new Contact(LastName='INVALIDNAME');
the code will compile
but if you do this instead:
Contact contact= new Contact(LastName=INVALIDNAME);
Salesforce will try to use the value of a custom field named INVALIDNAME in the object Contact, and won't compile.
This will be shown on the "Problems" tab on Developer Console