public function testSubscriptionsPaged() { $subscriptionResult = [['name' => 'projects/project/subscriptions/subscription-a', 'topic' => 'projects/project/topics/topic-a'], ['name' => 'projects/project/subscriptions/subscription-b', 'topic' => 'projects/project/topics/topic-a'], ['name' => 'projects/project/subscriptions/subscription-c', 'topic' => 'projects/project/topics/topic-a']]; $this->connection->listSubscriptions(Argument::that(function ($options) { if ($options['foo'] !== 'bar') { return false; } if ($options['pageToken'] !== 'foo' && !is_null($options['pageToken'])) { return false; } return true; }))->willReturn(['subscriptions' => $subscriptionResult, 'nextPageToken' => 'foo'])->shouldBeCalledTimes(2); $this->client->setConnection($this->connection->reveal()); $subscriptions = $this->client->subscriptions(['foo' => 'bar']); // enumerate the iterator and kill after it loops twice. $arr = []; $i = 0; foreach ($subscriptions as $subscription) { $i++; $arr[] = $subscription; if ($i == 6) { break; } } $this->assertEquals(6, count($arr)); }