I have a link on a page /my/example/page which links to a laravel route my.route.

Route

Route::group(['middleware' => ['auth']], function () {
    Route::group(['middleware' => ['Some\Custom\Auth\Middleware:1']], function () {
        Route::match(['GET', 'POST'], '/my/route/to/external/controller', 'exampleController@externalLink')->name('my.route');
    }
}    

Link on /my/example/page

<a href="/my/route/to/external/controller">Link</a>

此路由/my/route/to/external/controller指向exampleController控制器中的此控制器方法externalLink,该方法返回要使用的HREF的url

public function externalLink()
{
    return $this->redirect->away('www.externalsite.com');
}

My test is

$this->visit(/my/example/page)
     ->click('Link')
     ->assertRedirectedToRoute('my.route');

I constantly get the error

Symfony\Component\HttpKernel\Exception\NotFoundHttpException

when I use the click() testing method.

我可以用@expectedException捕捉到这一点,但他的没有帮助,因为我期待看到不同的页面.

我也试过(不是一起);

->assertResponseStatus(200);
->seePageIs('www.externalsite.com');
->assertRedirect();
->followRedirects();

通过浏览器判断,当点击url时,我得到

http://www.example.com/my/route/to/external      302
http://www.externalsite.com                      200

How can I functionally test the button being clicked and redirecting to an external site?

推荐答案

我现在正在努力解决一个类似的问题,我几乎放弃了直接测试端点. Select 这样的解决方案...

测试链接在视图中是否包含正确的信息:

$this->visit('/my/example/page')
    ->seeElement('a', ['href' => route('my.route')]);

将控制器中的逻辑移动到可以直接测试的地方.Laravel\Socialite package有一些有趣的测试,如果你这样做可能会有所帮助...

class ExternalLinkRedirect {
    public function __construct($request){
        $this->request = $request;
    }

    public function redirect()
    {
        return redirect()->away('exteranlsite.com');
    }
}

然后直接测试它

    $route = route('my.route');
    $request = \Illuminate\Http\Request::create($route);
    $redirector = new ExternalLinkRedirect($request);
    $response = $redirector->redirect();
    $this->assertEquals('www.externalsite.com', $response->getTargetUrl());

Laravel相关问答推荐

从8.0更新到10.0后,图像不再上传到存储

发送邮箱后,Laravel重定向偶尔会导致错误500

Livewire 3分页在点击后不更新页面

如何在 laravel 中为另一个用户 session()->forget('cart')?

如何在 laravel 5.2 中显示 500 内部服务器错误页面?

Laravel 框架类在 PHPUnit 数据提供程序中不可用

在 Laravel 中将 Public 添加到assets资源路径

在 Eloquent 中按自定义顺序对集合进行排序

Laravel 存储文件的公共 url

如何使用命令行手动运行 laravel/lumen 作业(job)

使用 Laravel 创建新项目会引发异常

Laravel:在另一个控制器中加载方法而不更改 url

laravel 队列 - 同步驱动程序如何工作?它是在单独的进程/线程还是主执行线程中执行?

如何在 laravel 用户删除中重置自动增量?

Laravel 数据库模式中的 MediumBlob

Laravel 4 - 一个表单中有两个提交按钮,并且两个提交都由不同的操作处理

无法在控制器的构造函数上调用 Auth::user()

Laravel 部署……有标准的方式吗?

Laravel 更新后用户模型错误(用户类包含 3 个抽象方法)

Laravel:如何在 PhpUnit 上启用堆栈跟踪错误