MrA*_*dre 10 php phpunit laravel
我正在为我的控制器编写一些测试,但我的一个测试不起作用.它倾向于搜索并将结果返回到页面.但它实际上是重定向到主页.这是我的代码:
use DatabaseMigrations;
protected $user;
public function setUp()
{
parent::setUp();
$this->seed();
$this->user = factory(User::class)->create(['role_id' => 3]);
}
/** @test */
public function test_manage_search_user()
{
$response = $this->followingRedirects()->actingAs($this->user)->get('/manage/users/search', [
'choices' => 'username',
'search' => $this->user->username,
]);
$response->assertViewIs('manage.users');
$response->assertSuccessful();
$response->assertSee($this->user->email);
}
Run Code Online (Sandbox Code Playgroud)
您应该使其工作的URL如下所示:
http://localhost/manage/users/search?choices=username&search=Test
Run Code Online (Sandbox Code Playgroud)
我再次检查,看起来它没有在带有get请求的参数中给出.我怎样才能解决这个问题?
Mat*_*air 10
我有同样的问题试图测试GET请求,你实际上不能传递参数$this->get('uri', [header])但你可以通过使用$this->call,如果你签入MakesHttpRequests.php你可以看到,this->get()实际上是使用调用方法.
通过向get方法添加数组,您将更改请求标头,这就是您没有获取参数的原因.
public function get($uri, array $headers = [])
{
$server = $this->transformHeadersToServerVars($headers);
return $this->call('GET', $uri, [], [], [], $server);
}
public function call($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null)
{
$kernel = $this->app->make(HttpKernel::class);
$files = array_merge($files, $this->extractFilesFromDataArray($parameters));
$symfonyRequest = SymfonyRequest::create(
$this->prepareUrlForRequest($uri), $method, $parameters,
$cookies, $files, array_replace($this->serverVariables, $server), $content
);
$response = $kernel->handle(
$request = Request::createFromBase($symfonyRequest)
);
if ($this->followRedirects) {
$response = $this->followRedirects($response);
}
$kernel->terminate($request, $response);
return $this->createTestResponse($response);
}
Run Code Online (Sandbox Code Playgroud)
因此,如果您要测试GET请求,则必须执行以下操作:
$request = $this->call('GET', '/myController', ["test"=>"test"]);
Run Code Online (Sandbox Code Playgroud)
在您的控制器中,您应该能够获得这样的参数:
public function myController(Request $request)
{
$requestContent = $request->all();
$parameter = $requestContent['test'];
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Laravel 5.X(更确切地说是5.6),您可以使用以下方式传递自定义参数:
$response = $this->json('GET', '/url/endpoint',['params'=>'value']);
Run Code Online (Sandbox Code Playgroud)
您可以使用路由助手构建带有查询字符串的 url。在你的情况下,我会做这样的事情。假设路由名称是 manage.users.search
$route = route('manage.users.search', [
'choices'=> 'username',
'search' => $this->user->username,
]);
$response = $this->followingRedirects()
->actingAs($this->user)
->get($route);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7999 次 |
| 最近记录: |