В настоящее время я создаю пакет Laravel, который вводит новый метод в Illuminate\Http\Request
через Макрос. Метод, который я вводил, был завершен и, как ожидается, будет работать хорошо, но я также хочу проверить его, прежде чем выпускать его.
Мой тест требует от меня изменить заголовок запроса Accept
, чтобы я мог проверить, проходит ли тест или нет. Поэтому для моделирования запроса я сделал следующее:
// package/tests/TestCase.php
namespace Vendor\Package;
use Illuminate\Http\Request;
use Orchestra\Testbench\TestCase as Orchestra;
abstract class TestCase extends Orchestra
{
/**
* Holds the request
* @var Illuminate\Http\Request
*/
protected $request;
/**
* Setup the test
*/
public function setUp()
{
parent::setUp();
$this->request = Request::capture();
$this->request->headers->set('Accept', 'application/x-yaml');
}
}
Затем в моем тесте я использую метод, который я вставляю в Request
с помощью $this->request->wantsYaml()
, и он всегда возвращает false, так как заголовок Accept
не получает значение application/x-yaml
.
class RequestTest extends TestCase
{
/** @test */
public function it_should_return_a_bool_if_page_wants_yaml_or_not()
{
dump($this->request->wantsYaml()); // Return false
$this->assertTrue($this->request->wantsYaml()); // It fails!
}
}
Как я могу моделировать заголовки в тесте в разработке пакета Laravel?
ИЗМЕНИТЬ
Это мой класс YamlRequest
use Illuminate\Http\Request;
use Illuminate\Support\Str;
class YamlRequest extends Request
{
/**
* Acceptable content type for YAML.
* @var array
*/
protected $contentTypeData = ['/x-yaml', '+x-yaml'];
/**
* Determine if the current request is asking for YAML in return.
*
* @return bool
*/
public function wantsYaml()
{
$acceptable = $this->getAcceptableContentTypes();
// If I dd($acceptable), it comes out as empty during tests!
return isset($acceptable[0]) && Str::contains($acceptable[0], $this->contentTypeData);
}
}
Поэтому мне буквально приходится моделировать Accept, чтобы увидеть, работает ли мой метод wantsYaml
, как ожидалось.