Ich baue gerade ein Laravel-Paket, das eine neue Methode in Illuminate\Http\Request
über Macros injiziert. Die Methode, die ich injiziere, wurde abgeschlossen und es wird erwartet, dass sie gut funktioniert, aber ich möchte sie auch testen, bevor sie veröffentlicht wird.Wie simuliere ich Accept-Header in einem Test in einem Laravel 5-Paket?
Mein Test erfordert, dass ich die Accept
Kopfzeile der Anfrage ändere, damit ich sehe, ob der Test bestanden wird oder nicht. So habe ich folgendes getan, um die Anfrage zu simulieren:
// 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');
}
}
Da ist in meinem Test habe ich die Methode verwenden ich in Request
mit $this->request->wantsYaml()
injizieren und es ist immer falsch zurückkehrt, da der Accept
Header nicht auf application/x-yaml
gesetzt zu werden.
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!
}
}
Wie kann ich die Header in einem Test in Laravel-Paketentwicklung simulieren?
EDIT
Das ist meine YamlRequest
Klasse
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);
}
}
Also das, um, wenn meine wantsYaml
Methode arbeiten, um zu sehen Accept Ich muß buchstäblich simulieren, wie erwartet.
Bitte fügen Sie Ihre Klasse oder den Teil der Klasse, wo Sie es tun möchten und wie Sie übergeben/erstellen Anfrageobjekt in dieser Klasse –
Hinzugefügt die 'Use' Aussage. – Aborted
@ MarcinNabiałek Welche Klasse meinst du genau? Ich möchte nur den Content-Type-Header für meine Tests simulieren. Mein Code funktioniert so wie es sollte (ich glaube), aber ich brauche diese Simulation in meinen Tests, um es zu beweisen. – Aborted