как протестировать контроллер Laravel, который считывает информацию из файла .json

#php #laravel-5 #phpunit

#php #laravel-5 #phpunit

Вопрос:

Я новичок в Laravel и PHPUnit. Я пытаюсь протестировать контроллер, который считывает файл .json, выполняет некоторые вычисления и возвращает результат, подобный этому [3,3,2,0.5].

Как я могу отправить.файл json или какое-то значение для контроллера и проверки результатов обратной связи?

Заранее благодарю

контроллер:

 namespace AppHttpControllers;

class payController extends Controller
{
    public function index()
    {
        $ratio = [];
        $ratio1= [];
        $string = file_get_contents("input.json");
        if(!isset($string)){
            echo 'File is empty.';
        } else {
            $json_a = json_decode($string, true);

            $required_income = $json_a['required_income'];

            foreach ($json_a['sms_list'] as $json) {
                $ratio_value = $json['income'] * 100 / $json['price'];
                array_push($ratio, [$ratio_value, $json['price'], $json['income']]);
            }

            foreach ($json_a['sms_list'] as $json) {
                array_push($ratio1, [$json['price'], $json['income']]);
            }

            $count = count($ratio);
            rsort($ratio, 0);

            $smsPrice = [];
            for ($i = 0; $i < $count; $i  ) {
                $price = $ratio[$i][1];
                $income = $ratio[$i][2];
                $divisionRequiredIncome = floor($required_income / $price);
                if ($divisionRequiredIncome > 0) {
                    for ($j = 0; $j < $divisionRequiredIncome; $j  ) {
                        array_push($smsPrice, $price);
                    }
                    $required_income -= ($income * $divisionRequiredIncome);
                }
            }
            sort($ratio1, 1);
            for ($i = 0; $i < $count; $i  ) {
                if ($required_income - $ratio1[$i][1] <= 0) {
                    array_push($smsPrice, $ratio1[$i][0]);
                    break;
                }
            }
        }
        echo '<pre>';
        var_dump($smsPrice);
    }
}
  

payControllerTest:

 namespace TestsUnit;

use TestsTestCase;
use IlluminateFoundationTestingWithFaker;
use IlluminateFoundationTestingRefreshDatabase;

use AppHttpControllerspayController;

class payControllerTest extends TestCase
{
    /**
     * A basic unit test example.
     *
     * @return void
     */
    public function test_first()
    {
        $res = payController::index();
    }

}
  

введите файл.json:

 {
    "sms_list": [
      {"price": 0.5, "income": 0.41},
      {"price": 1, "income": 0.96},
      {"price": 2, "income": 1.91},
      {"price": 3, "income": 2.9}
    ],
    "required_income": 8
}
  

Комментарии:

1. Вы могли бы поместить свою логику в отдельный класс / метод и передать строку json этому методу. Таким образом, вы можете протестировать (и повторно использовать) свою логику

2. Спасибо, это помогло мне. 🙂