如何测试用Laravel点击div的结果? (PHPUnit的)

时间:2016-03-14 01:21:50

标签: php laravel phpunit

我有下一个div - >

<div id="grid">
  <div id="grid-item" onClick="sendServer(1)">Data 1 </div>
  <div id="grid-item" onClick="sendServer(2)">Data 2 </div>
  <div id="grid-item" onClick="sendServer(3)">Data 3 </div>

</div>

sendServer()是一个ajax,用于验证数据并将数据发送到服务器并转到路由&#39; /irCurso{id}&#39;。

我想在点击这些div时测试结果,我知道我不能使用->click()方法因为它只适用于<a>标记。这是我的代码:

$this->visit('/cursos')
            ->click('id=grid-item')
            ->seePage('irCurso/1');

谢谢:)

2 个答案:

答案 0 :(得分:0)

正如Artenes Nogueira所说,Laravel 5.3及更早版本没有浏览器测试支持。

为了解决这个问题,您需要使用composer

安装PHPUnit_selenium包

composer require --dev phpunit/phpunit-selenium

tests文件夹

中创建Selenium Test Case类
<?php


class SeleniumTestCase extends PHPUnit_Extensions_Selenium2TestCase
{
    /**
     * The base URL to use while testing the application.
     *
     * @var string
     */
    protected function setUp()
    {
        $this->setBrowser('firefox');
        $this->setBrowserUrl('http://localhost:8000/');
    }

    protected function visit($path)
    {
        $this->url($path);
        return $this;
    }

    protected function see($text, $tag = 'body')
    {
        print_r(request()->session()->all());
        //method call by tag name;
        $this->assertContains($text,$this->byTag($tag)->text());
        return $this;
    }

    protected function pressByName($text){
        $this->byName($text)->click();
        return $this;
    }
    protected function pressByTag(){
        $this->byTag('button')->click();
        return $this;
    }
    protected function type($value, $name)
    {
        $this->byName($name)->value($value);
        return $this;
    }

    protected function hold($seconds){
        sleep($seconds);
        return $this;
    }
}

并为访问主页网址创建新的测试用例

<?php    

class ExampleTest extends SeleniumTestCase
{
    /**
     * A basic functional test example.
     *
     * @return void
     */
    public function testTitle()
    {
        $this->visit('/')
            ->see('Site title','title');
    }
}

并且在开始任何测试之前,您需要启动selenium服务器

java -jar /usr/local/bin/selenium-server-standalone-2.35.0.jar

最后,从终端

运行命令PHPUnit test

快乐测试!

参考文献:

Selenium and Laravel 5.2

答案 1 :(得分:-1)

如果使用5.3或更低版本,则无法测试Laravel测试API单击的div的结果。

当您单击div时,您希望运行JS函数。不幸的是,Laravel测试API不会与你的js交互,所以它不会被执行。由于未执行,因此无法评估结果。

但是使用Dusk(在laravel 5.4中),您可以通过Laravel测试API测试javascript。查看文档以获取有关Dusk的更多信息:https://laravel.com/docs/master/dusk