代码之家  ›  专栏  ›  技术社区  ›  Don't Panic

在Laravel黄昏中记录javascript控制台输出

  •  1
  • Don't Panic  · 技术社区  · 6 年前

    我用的是Laravel 5.6和Laravel Dally 3.0.9。

    黄昏是非常方便的,但是当一个测试在一个有一些JavaScript功能的页面上失败时,很难找出出什么问题。黄昏会生成一个屏幕截图,这很有帮助,但我真正需要的是看到来自javascript控制台的输出。

    显然这是可能的-黄昏创造了 tests/Browser/console 目录作为其安装的一部分,以及 this PR suggests the JS console output is logged 或者至少是可记录的。

    但是,没有关于如何实际做到这一点的文档(我可以找到)。 Browsing the diffs in that PR 我看到了一种新方法 logConsole() (后来改名为 storeConsoleLog() 正如@jonas在评论中指出的那样),但我似乎不能让它做任何事情,例如:

    $browser->visit('/somewhere')
            ->select('#foo', '2')
            ->value('#date', '2018-07-29')
            ->storeConsoleLog('bar')
            ->assertEnabled('button[type=submit]');
    

    此测试失败,并生成一个不错的屏幕截图,但没有任何日志文件的迹象。我试过移动 ->storeConsoleLog('bar') 围绕在链条上,如第一条或最后一条,并作为链条前后的一条单独的线:

    $browser->visit('/somewhere')
    ->...full chain here;
    $browser->storeConsoleLog('bar');
    

    但它们都没有什么区别。我的JS有一系列 console.log() 这是我在浏览器中测试自己时使用的,它会告诉我到底出了什么问题。我希望这个功能可以记录这些消息。

    我误解了公关,这是可能的吗?如果是这样,怎么办?

    更新

    通过调试 存储控制台日志() 方法在 vendor/laravel/dusk/src/Browser.php 我可以看到方法被正确调用,但是没有控制台内容需要记录。如果我手动重复测试在chrome中所采取的步骤,那么会有一些行被写入chrome devtools控制台,事实上3行是在页面加载时写入的。为什么黄昏看不到那些?

    更新2

    我发现如果你移除 '--headless' driver() 方法在 DuskTestCase ,测试期间将显示浏览器。然后,您可以显示该浏览器的开发工具,并在测试运行时实时观察控制台输出。它太快了,无法真正发挥作用,如果出现错误,浏览器将关闭,您将丢失控制台上的所有内容(除非有方法在失败时保持浏览器打开?),但在此处添加此内容以防对某人有用!

    1 回复  |  直到 6 年前
        1
  •  1
  •   Jonas Staudenmeir    6 年前

    other log types browser driver

    $browser->driver->switchTo()->alert()->getText()
    

    document.write()

    推荐文章