Загрузка файла образа модульного теста - PullRequest
0 голосов
/ 06 июня 2019

Мне нужно написать модульный тест для загрузки файла.Однако я не могу понять, как я могу опубликовать изображение, используя только php-код.

Функция тестирования до сих пор:

public function testValidateAddAdminFormSuccess() {
    //prepare
    $testFile = array(
        'name' => 'test.jpeg',
        'tmp_name' => 'Macintosh HD/Applications/mampstack-7.1.30-0/apache2/htdocs/',
        'type' => 'image/jpeg',
        'size' => '6717',
        'error' => 0

    );
    $_FILES['image'] = $testFile;
    $_POST['productName'] = 'test';
    $_POST['price'] = 45;
    $_POST['productDesc'] = 'test description';
    $_POST['storeName'] = 'test store';
    $_POST['amount'] = 204;
    $_GET['product'] = 0;
    $database = new DatabaseTest();
    $adminModel = new AdminModel(NULL, $database);

    //run
    $adminModel->validateAddAdminForm();

    //validate
    $this->assertNotNull($adminModel);
    $this->assertTrue($adminModel->valid);
  }

Мой метод подтверждения загрузки в модели администратора:

private function validateUploadFile() {

    $targetDir = 'images/';
    $this->imgUrl = $targetDir . basename($_FILES['image']['name']);
    $imageFileType = strtolower(pathinfo($this->imgUrl, PATHINFO_EXTENSION));
    if (isset($_POST['submit']) && !empty($_FILES['image']['name']) || $this->isEditing() && !empty($_FILES['image']['name'])) {
      $check = getimagesize($_FILES["image"]['tmp_name']);
      if ($check !== false) {
      } else {
        $this->imageErr = 'File is not an image.';
      }
      if (file_exists($this->imgUrl)) {
        $this->imageErr  = "Sorry, file already exists.";
      }
      if ($_FILES["image"]["size"] > 2000000) {
        $this->imageErr = "Sorry, your file is too large.";
      }
      if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) {
        $this->imageErr = "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
      }
    } else if ($this->isEditing()) {
      $this->imageChanged = false;
    } else {
      $this->imageErr = 'Please upload an image.';
    }
    if (empty($this->imageErr)) {
      move_uploaded_file($_FILES["image"]["tmp_name"], $this->imgUrl);
      if ($this->isEditing() && !empty(basename($_FILES['image']['name']))) {
        $this->imageChanged = true;
      }
    }
  }

Файл не распознается в моем методе проверки загрузки.Метод работает отлично, хотя, как я уже тестировал его на странице администратора, он сам.Как загрузить изображение без использования веб-страницы?

Ошибка, установленная в imageErr: `Пожалуйста, загрузите изображение '.

1 Ответ

0 голосов
/ 06 июня 2019

Вы должны использовать клиентский HTTP для своего тестового кода. Жадность может помочь вам с опцией multipart . Отлично работает с PHPUnit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...