Laravel 5.5 和 Vue.js 刀片测试

Posted

技术标签:

【中文标题】Laravel 5.5 和 Vue.js 刀片测试【英文标题】:Laravel 5.5 & Vue.js Blade Testing 【发布时间】:2019-03-09 16:05:12 【问题描述】:

我的刀片中有以下内容...

<div>
  <contact-form></contact-form>
</div>

我想测试以确保 Vue.js 组件始终安装在我的测试中...

public function testRoute()

    $this->visit('/');
    //stuck here

基本上我期待测试刀片是否具有&lt;contact-form&gt;。我应该如何进行?

【问题讨论】:

您是否尝试返回视图return view('YourView'); @MeeraTank 正在运行功能测试,而不是对实际功能进行编码 @GEOFFREYMWANGI &lt;contact-form&gt;&lt;/contact-form&gt; 对我来说似乎不是一个有效的 html 标记。因此,针对它进行验证似乎是不好的做法。如果我错了,请证明我...... @Bart 我相信该操作正在使用 vue 组件。 vuejs.org/v2/guide/components.html @adam 感谢您指出这一点。我不太喜欢 Vue……但另一方面,Dusk 是否能够处理所有 Vue 标记? 【参考方案1】:

使用assertSee

断言给定的字符串包含在响应中

$this
    ->visit('/')
    ->assertSee('<contact-form>')
    ->assertSee('</contact-form>');

查看更多 laravel 5.5 测试断言here

或者,如果您想深入了解客户端浏览器测试,请查看 Laravel Dusk,它有 assertSourceHas 方法。

【讨论】:

+1 因为assertSourceHas 将查看未渲染的 html。 &lt;contact-form&gt; 在被 Vue / react / angular / ... 渲染后将不再是那样,这可能是这个问题的关键。【参考方案2】:

您可以使用MakesHttpRequests.php trait 中的callget 方法来检查文本:

// this returns \Illuminate\Foundation\Testing\TestResponse
$response = $this->get('/');
// use the TestResponse api
$response->assertSee($value);

Github 源码参考: https://github.com/laravel/framework/blob/5.5/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php

https://github.com/laravel/framework/blob/5.5/src/Illuminate/Foundation/Testing/TestResponse.php

【讨论】:

以上是关于Laravel 5.5 和 Vue.js 刀片测试的主要内容,如果未能解决你的问题,请参考以下文章

LARAVEL + Vue.js:使用刀片在 MPA 中显示整个页面的 vue.js 组件,对 SEO 不友好

vue.js 组件使用 laravel 刀片作为模板

来自 Vue.js 的组件未加载到 Laravel 刀片中

在 laravel 刀片视图中显示 vue js 模板

laravel 刀片模板中的 Vue.js v-for 循环

为啥 vue js 组件没有显示在 laravel 刀片中?