Мне попался сценарий, в котором я не уверен, как тестировать.
Мое приложение обменивается данными с 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()
метод связывается с Zoho API.
Проблема, с которой я сталкиваюсь, заключается в том, что я не хочу, чтобы эти записи вставлялись в 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?