#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. Спасибо, это помогло мне. 🙂