2017-05-10 1 views
1

J'ai un déclencheur qui envoie un e-mail en utilisant un modèle VF. J'essaie d'écrire un test unitaire pour ce code, mais je continue à rencontrer un problème lorsque j'essaie de créer les données de test.
Voici ma méthode d'essai:Test d'unité de modèle d'e-mail Visualforce

static TestMethod void testQuestionAttachment(){ 
    Id profileId = SYSTEM_ADMIN_PROFILE_ID; 
    List<User> users = TestUtils.createUsers(profileId, 1); 
    insert users; 
    string templateText = '<messaging:emailTemplate subject="{!relatedTo.Name}" recipientType="User" relatedToType="Cutom_Object__c"><messaging:htmlEmailBody ><ul><li>test content</li></ul></messaging:htmlEmailBody></messaging:emailTemplate>'; 
    EmailTemplate template = new EmailTemplate(
     developerName = 'TestEmailVFTemplate', 
     TemplateType= 'visualforce', 
     FolderId = users[0].Id, 
     Name = 'TestEmailVFTemplate', 
     IsActive = true); 
    template.HtmlValue = templateText; 
    template.Body = templateText; 
    System.runAs(users[0]){ 
     insert template; 
    } 
    ... 

Et il échoue avec FIELD_INTEGRITY_EXCEPTION, <messaging:emailTemplate> is required and must be the outermost tag in the markup at line 1 column 1: [Markup].
Je ne comprends vraiment pas pourquoi cela ne fonctionne pas. Il doit me manquer quelque chose ...

Répondre

0

Le problème est avec votre TemplateType = 'Visualforce'. Au lieu de cela, changez-le en template.Markup=templateText;. Le champ Markup peut être utilisé pour affecter le corps du modèle Visualforce. Je l'ai essayé dans ma classe de test. exemple ci-dessous concernent:

static @isTest void myTest() { 
    Profile pf = [SELECT Id,Name FROM Profile WHERE Name = 'System Administrator' LIMIT 1]; 

    User usr = new User(
     Alias     = 'usralias', 
     Email     = '[email protected]', 
     Emailencodingkey  = 'UTF-8', 
     Lastname    = 'user_lastname', 
     Languagelocalekey  = 'en_US', 
     Localesidkey   = 'en_US', 
     Profileid    = pf.Id, 
     Timezonesidkey  = 'America/Los_Angeles', 
     Username    = Math.random() + '[email protected]', 
     CompanyName   = 'the company', 
     UserRoleId='00E28000000zqCy' 
    ); 
    insert usr; 
    string templateText = '<messaging:emailTemplate subject="{!relatedTo.Name}" recipientType="User" relatedToType="Custom_Object__c"><messaging:htmlEmailBody ><ul><li>test content</li></ul></messaging:htmlEmailBody></messaging:emailTemplate>'; 
    EmailTemplate template = new EmailTemplate(DeveloperName = 'TestEmailVFTemplate', TemplateType= 'Visualforce', FolderId = UserInfo.getUserId(), 
    Name = 'TestEmailVFTemplate', 
    IsActive = true); 

    template.Markup=templateText; 

    System.runAs(usr){ 
     insert template; 
    } 
} 
+0

Je ne peux pas changer le type de modèle à 'Text' Becuase dans mon code, je vous envoie le modèle' un WhatId' (objet personnalisé) et un 'TargetObject' (utilisateur). Et pour les modèles de texte, ceux-ci sont incompatibles, mais fonctionnent dans les modèles VF. – AvailableName

+0

@AvailableName Avez-vous essayé d'abord? –

+0

Oui, c'était ma première tentative. – AvailableName