flower
flower

Reputation: 1059

write unit test request->ajax() laravel

how to write test for this function ?? how to test request-ajax()??

public function getChangeLoc(Request $request, $loc)
{   
    if ($request->ajax()) {

        if(!in_array($loc, config('loc.available'))) {
            return response()->json([
                'status' => 'ERROR',
                'message' => 'Not available'
            ]);
        }
        Session::put('locale', $loc);

        return response()->json([
            'status' => 'OK',
            'loc' => $loc,
        ]);
    }

    if(!in_array($loc, config('loc.available'))) {
        return Redirect::to('/?unknown-loc);
    }
    Session::put('loc', $loc);

    if(filter_var($request->input('redirect_url', ''), FILTER_VALIDATE_URL)) {
        return Redirect::to($request->input('redirect_url'));
    }

    return Redirect::to('/');
}

I test the function like this

            $this->visit('/loc/en')
                 ->seePageIs('/admin/client')

but its not see request->ajax?

Upvotes: 0

Views: 937

Answers (1)

Patryk Woziński
Patryk Woziński

Reputation: 746

To test ajax requests you can implement function in your TestCase class this method. Your request needs HTTP_X-Requested-With header.

protected function ajaxPost($route = '', array $parameters = [])
{
    return empty($route) ? null : $this->json(
        'post',
        $route,
        $parameters,
        ['HTTP_X-Requested-With' => 'XMLHttpRequest']
    );
}

Now you can test your classes

$this->ajaxPost(route('your.route'), ['foo' => 'bar'])->seeJson([
    'is_ok' => true,
]);

Remember: it's not unit tests.

Upvotes: 2

Related Questions