2017-05-10 43 views
1

我有一個使用VF模板發送電子郵件的觸發器。我試圖爲該代碼編寫單元測試,但在嘗試創建測試數據時仍遇到問題。
這裏是我的測試方法: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; 
    } 
    ... 

它失敗FIELD_INTEGRITY_EXCEPTION, <messaging:emailTemplate> is required and must be the outermost tag in the markup at line 1 column 1: [Markup]
我真的不明白爲什麼這不起作用。我必須缺少一些東西......

回答

0

問題出在你的TemplateType = 'Visualforce'。改爲將其更改爲template.Markup=templateText;Markup字段可用於分配視覺效果模板的主體。我在我的測試課上嘗試過。 請參考下面的例子:

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

我不能改變模板類型爲'Text'在我的代碼監守我送的模板'WhatId'(自定義對象)和'TargetObject'(用戶)。對於那些不兼容的文本模板,但在VF模板中工作。 – AvailableName

+0

@AvailableName你先試過嗎? –

+0

是的,那是我第一次嘗試。 – AvailableName