You need to sign in to do that
Don't have an account?

エラー「TestMethod として定義されたメソッドは、getContent コールをサポートしていません。」
お世話になっております。
PDFを作成し、メモ&添付ファイルに保存し、メモ&添付ファイルに保存したPDFを表示するページを作成しました。
しかし、テストクラスが上手くいかず、悩んでおります。
下記のコードですと、エラー「TestMethod として定義されたメソッドは、getContent コールをサポートしていません。」と出てしまいます。
自分でも調べてみたのですが、いまいち分からず、どのようなテストメソッドを書くと良いのかご教授いただけますと幸いです。
どうぞ宜しくお願い致します。
AccountPdf.page(PDFページ)
AccountPdfAppended.page(カスタムボタンで/apex/AccountPdfAppended?id=【取引先ID】の様に最初に呼び込むページ)
TestAccountPdfAppended.cls(テストクラス)
PDFを作成し、メモ&添付ファイルに保存し、メモ&添付ファイルに保存したPDFを表示するページを作成しました。
しかし、テストクラスが上手くいかず、悩んでおります。
下記のコードですと、エラー「TestMethod として定義されたメソッドは、getContent コールをサポートしていません。」と出てしまいます。
自分でも調べてみたのですが、いまいち分からず、どのようなテストメソッドを書くと良いのかご教授いただけますと幸いです。
どうぞ宜しくお願い致します。
AccountPdf.page(PDFページ)
<apex:page standardController="Account" extensions="AccountPdf" renderAs="pdf"> <body>{!acc.Name}</body> </apex:page>AccountPdf.cls(PDFページのコントローラ)
public with sharing class AccountPdf{ public Account acc { get; set; } // コンストラクタ public AccountPdf(ApexPages.StandardController controller) { // パラメータを取得 ID accd = ApexPages.currentPage().getParameters().get('Id'); // パラメータ'Id'から取引先を取得 acc = [SELECT Id, Name FROM Account WHERE Id = :accd LIMIT 1 ]; } }
AccountPdfAppended.page(カスタムボタンで/apex/AccountPdfAppended?id=【取引先ID】の様に最初に呼び込むページ)
<apex:page standardController="Account" extensions="AccountPdfAppended"> <script> window.sfdcPage.appendToOnloadQueue(function() { reloadAndClose(); }); function reloadAndClose() { doAction(); } </script> <apex:form > <apex:actionfunction name="doAction" action="{!doAction}" /> </apex:form> PDFを作成しています...<BR/> </apex:page>AccountPdfAppended.cls
public with sharing class AccountPdfAppended{ private Account acc{get;set;} // コンストラクタ public AccountPdfAppended(ApexPages.StandardController controller) { // パラメータを取得 ID accId = ApexPages.currentPage().getParameters().get('Id'); // パラメータ'Id'から商談を取得 acc = [SELECT Id, Name FROM Account WHERE Id = :accId LIMIT 1 ]; } // 戻り呼び出し public Pagereference doAction() { // PDF作成 PageReference pageRefPdf = Page.AccountPdf; pageRefPdf.getParameters().put('Id', acc.Id); // メモ&添付ファイルに保存 Attachment attachment = new Attachment(); attachment.Name = 'AccountPDF(' + String.valueOf(Date.today()) + ').pdf'; attachment.Body = pageRefPdf.getContent(); attachment.ParentId = acc.Id; insert attachment; // PDF表示 PageReference pageRef = new Pagereference('/servlet/servlet.FileDownload?file=' + attachment.Id); return pageRef; } }
TestAccountPdfAppended.cls(テストクラス)
@isTest public class TestAccountPdfAppended { static testMethod void testSuccess01() { // レコード作成 Account acc = new Account(Name='testName'); insert acc; Apexpages.currentPage().getParameters().put('Id', acc.Id); AccountPdfAppended c = new AccountPdfAppended(new ApexPages.StandardController(acc)); c.doAction(); // ←エラー } }
トランザクション内で DML (Insert / Update / Upsert / Delete) 発行後にコールアウトを行なう事で発生するエラーのはずです。
このエラーに関しては下記が参考になると思います。
http://tyoshikawa1106.hatenablog.com/entry/2015/07/17/125000
回避方法ですが下記のようにテストクラスのときと通常の処理とで切り替えるのはいかがでしょうか
テストクラスのときはgetContentを実行しないやりかたです。
(ザックリ書いたので判定処理の書き方などで誤りがあったらすみません。)
All Answers
トランザクション内で DML (Insert / Update / Upsert / Delete) 発行後にコールアウトを行なう事で発生するエラーのはずです。
このエラーに関しては下記が参考になると思います。
http://tyoshikawa1106.hatenablog.com/entry/2015/07/17/125000
回避方法ですが下記のようにテストクラスのときと通常の処理とで切り替えるのはいかがでしょうか
テストクラスのときはgetContentを実行しないやりかたです。
(ザックリ書いたので判定処理の書き方などで誤りがあったらすみません。)
ご回答ありがとうございました。
テストクラスのときは回避するようにすればよかったのですね。
とても勉強になりました。
ありがとうございました。