Connect APIとTest Class

More than 5 years have passed since last update.

ConnectAPIを使うとChatterの情報に簡単にアクセスすることができます。例えば次のようにJavaScriptから@RemoteActionを利用してChatterに投稿された情報を取得するというような使い方ができます。

@RemoteAction

global static List<ConnectApi.FeedItem> getFeedItems() {
return ConnectApi.ChatterFeeds.getFeedItemsFromFeed(null, ConnectApi.FeedType.News, 'me').items;
}

Chatter情報を扱うときにとても便利なConnectAPIですが、テストクラスの作り方が少し特殊です。上記のような処理の場合だと次の書き方でテストすることができますが、このままだとSystem.AssertExceptionエラーが発生してしまいます。

Test.startTest();

List<ConnectApi.FeedItem> results = ChatterApiStartupControler.getFeedItems();

Test.stopTest();

エラーの原因はテストデータを準備していないためです。ConnectAPIのテストデータはINSERTなどではなく次の処理で作成します。

ConnectApi.FeedItemPage testPage = new ConnectApi.FeedItemPage();

List<ConnectApi.FeedItem> testItemList = new List<ConnectApi.FeedItem>();
testItemList.add(new ConnectApi.FeedItem());
testItemList.add(new ConnectApi.FeedItem());
testPage.items = testItemList;

// Set the test data
ConnectApi.ChatterFeeds.setTestGetFeedItemsFromFeed(null,
ConnectApi.FeedType.News, 'me', testPage);

ConnectApi.ChatterFeeds.setTestGetFeedItemsFromFeedの部分でテストデータが作成される仕組みです。この方法でテストデータを用意することでConnectAPIの処理のテストが可能になります。FeedItemオブジェクトのレコードをINSERTという方法ではエラーが発生するので注意が必要です。


参考

Testing ConnectApi Code

https://www.salesforce.com/us/developer/docs/apexcode/Content/connectAPI_TestingApex.htm