Проверка файлов конфигурации с помощью модульных тестов? - PullRequest
0 голосов
/ 18 мая 2018

Я создаю приложение, в котором пользователи могут выбрать один из определенных часовых поясов в config/timezones.php:

return [
    'malta'   => 'Europe/Malta',
    'manila'  => 'Asia/Manila',
    'newyork' => 'America/New_York',
];

В этом файле есть массив с идентификатором и допустимой строкой часового пояса (как найдено на PHP.net )

Я пытаюсь построить это приложение на основе тестовой разработки, поэтому, естественно, я написал модульный тест, чтобы проверить, правильно ли изменилось время, когда пользователь изменил свой часовой пояс:

namespace Tests\Unit;

use Carbon\Carbon;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;

class TimeZoneTest extends TestCase
{

    use RefreshDatabase;

    /** @test */
    public function the_date_and_time_will_be_displayed_based_on_the_timezone_of_the_user() {

        $user = factory(\App\User::class)->create([
            'timezone' => 'Asia/Manila' // +8 hours
        ]);

        $date = Carbon::create(2018, 1, 1, 0, 0, 0); // 2018-01-01 00:00:00

        $adjustedDate = $date->timezone($user->timezone)->format('Y-m-d H:i:s'); // +8 hours = 2018-01-01 08:00:00

        $this->assertEquals('2018-01-01 08:00:00', $adjustedDate);
    }
}

Это работает нормально, но вот проблема: если бы я сделал опечатку в файле конфигурации, модульный тест все равно прошел бы, но приложение сломалось бы.

Iмог бы просто создать еще один модульный тест, где я зациклюсь и проверим элементы моего файла конфигурации, используя in_array($timezone, timezone_identifiers_list()), но я не уверен, принадлежит ли он к модульному тесту.Мне кажется, что это нужно проверить только один раз после фиксации вашего кода или чего-то еще.

Мои вопросы: как / где / когда я проверяю, действителен ли мой файл конфигурации перед его развертыванием в рабочей среде

1 Ответ

0 голосов
/ 18 мая 2018

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

Таким образом, чтобы утверждать сбой при неправильной конфигурации, вы должны обратиться к интеграционному тесту - поскольку интеграционные тесты имеют дело с соавторами.Используемый вами тест интеграции зависит от того, где вы реализовали проверку работоспособности конфигурации.

Например, некоторые проекты помещают проверку конфигурации в самый фронт фронт-контроллера, поэтому, если какая-либо конфигурация является фиктивной, есть немедленное исключение.Если именно там живет ваша проверка конфигурации, у вас будет что-то вроде:

/**
 * @expectedException ApplicationException
 * @expectedExceptionCode 500
 */
function test_front_controller_explodes_with_500_error_when_booted_with_bad_configuration() {
    $this->fail('unimplemented');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...