Symfony phpunit test assert является ложным, но должно быть истинным - PullRequest
0 голосов
/ 26 сентября 2019

Извините за странный заголовок, но я не был уверен там.

У меня есть сущность с именем Slide.Здесь есть несколько свойств:

  • id
  • owner
  • url
  • image
  • image alt
  • file

Изображение используется для строки изображения, хранящейся в базе данных, файл используется для загрузки файла.Дело в том, что если изображение выбрано (/ загружается) или если вы редактируете слайд, в котором уже есть изображение, изображение alt не может быть нулевым, поскольку каждое изображение должно иметь изображение alt (в данном случае).

Это решается с помощью следующей функции:

/**
 * Validates the image alt. The image alt is only required if the slide has an image
 *
 * @Assert\Callback
 *
 * @param ExecutionContextInterface $context
 */
public function validateImageAlt(ExecutionContextInterface $context) {
    if (($this->file || $this->image) && !$this->imageAlt) {
        $context->buildViolation('Cannot leave image alt empty if an image is chosen / if the slide already has an image')->atPath('imageAlt')->addViolation();
    }
}

Теперь проблема заключается в редактировании.Когда я пытаюсь отредактировать слайд вручную и очищаю изображение alt, когда изображение выбрано (/ загружается), я возвращаюсь на ту же страницу и вижу ошибку.То же самое касается случая, когда на существующем слайде уже есть изображение, а я просто очищаю изображение alt.Это все хорошо, как и должно быть.

В моем тесте у меня есть следующее:

/**
 * @dataProvider editDataProvider
 */
public function testEditPage($id, $owner, $url, $imageAlt, $image, $hasRights, $assertion, $errorElement = '') {

В моем поставщике данных у меня есть следующая строка:

yield [1, 2, '81-', null, 'measurement-slide.png', true, false, '#slide_data_imageAlt']; // no image alt, but image chosen

Эта строка является единственной строкой для редактирования.Это тело функции, которое содержит только важную часть:

$form = $crawler->selectButton('saveData')->form();
$form['slide_data[owner]']->select($owner);
$form['slide_data[url]'] = $url;

if ($image) {
    $form['slide_data[file]']->upload(new UploadedFile(dirname(__FILE__) . '/../../Uploads/measurement-slide.png', $image, 'image/webp'));
}

$form['slide_data[imageAlt]'] = $imageAlt;
$submitForm = $this->client->submit($form);

if ($assertion) {
    // ....
} else {
    $this->assertEquals(1, $submitForm->filter('div.form-group.has-error')->count());
    $this->assertEquals(1, $submitForm->filter('div.form-group.has-error ' . $errorElement)->count());
}

Строка имеет $assertion false, что означает, что она должна идти в другом.Он делает это, но мой тест не пройден, и код $submitForm->filter('div.form-group.has-error')->count() возвращает 0 и, следовательно, не равен 1.

Я выкинул HTML-код $submitForm так же, как и мой оригинальный $crawlerи $this->client->getResponse() и все не показывают ошибку.Но если я делаю именно то, что должен делать мой тест, он не работает.

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