Мне попался сценарий, в котором я не уверен, как проверить.
Мое приложение обменивается данными с API Zoho CRM, используя официальный PHP SDK. Вот часть моего пользовательского класса, с которой у меня проблемы:
class App_ZCRM_User {
protected $record;
public function __construct( ZCRMRecord $record ) {
$this->record = $record;
}
public function create_default_tasks( array $tasks ) {
$records = [];
foreach( $tasks as $task ) {
$record = ZCRMRecord::getInstance( 'Tasks', null ); // Create empty ZCRMRecord
$record->setFieldValue( 'Subject', $task );
$record->setFieldValue( 'User', $this->record );
$records[] = $record;
}
$tasks = ZCRMModule::getInstance( 'Tasks' );
$insert = $tasks->createRecords( $records );
// Returns array of EntityResponse objects
return $insert->getEntityResponses();
}
}
Этот класс создается с помощью записи Zoho CRM с использованием уникального идентификатора контактов
// ZCRMRecord object
$record = ZCRMRecord::getInstance( 'Contacts', 'xxxxxxxxxx' );
$user = new App_ZCRM_User( $record );
$user->create_default_tasks( array(
'Choose vehicle make',
'Choose vehicle model',
) );
create_default_tasks()
Метод связывается с API Zoho.
Проблема, с которой я сталкиваюсь, заключается в том, что я не хочу, чтобы эти записи вставлялись в CRM при каждом запуске теста.
Я пытался смоделировать ZCRMModule для задач, но класс имеет приватный конструктор и использует статический метод getInstance()
, С помощью $tasks = ZCRMModule::getInstance( 'Tasks' );
и звонит $tasks->createRecords()
для этого класса будет получен живой запрос API.
Мой тест ниже, но он возвращает сообщение:
Статический метод «getInstance» не может быть вызван для фиктивного объекта
public function test_create_default_tasks() {
$tasks = array(
'Task 1',
'Task 2'
);
$records = [];
foreach( $tasks as $task ) {
$record = ZCRMRecord::getInstance( 'Tasks', null );
$record->setFieldValue( 'Subject', $task );
$record->setFieldValue( 'User', $this->record );
$records[] = $record;
}
$user = new App_ZCRM_User( $this->record );
$user->create_default_tasks( $tasks ); // Does API request
/**
* I want to mock the ZCRMModule tasks and simulate the createRecords() method
*/
$tasks = $this->getMockBuilder( 'ZCRMModule' )
->disableOriginalConstructor() // Constructor is private
->getMock();
$tasks::getInstance( 'Tasks' );
$insert = $tasks->createRecords( $records ); // Method returns null
$created = $insert->getEntityResponses();
// Not sure how to assert the value here...
//$this->assertEquals( );
}
Я теряюсь, пытаясь обдумать это … как я могу протестировать этот метод, не используя живой запрос API к Zoho?
Задача ещё не решена.
Других решений пока нет …