分类 技术 下的文章

写测试前需要准备的东西

  1. 默认数据需要准备
    一些数据是需要提前准备的,例如角色数据、分类数据。

1.1 表结构
在使用Laravel的时候,需要注意要先创建表结构。
如果是用原生的Laravel搭建的系统还好,每个表结构都应该有对应的migration。
但是在诸如Voyager等CMS的时候,可能并不会创建migration文件。
此时需要使用例如laravel-migrations-generator的反向migrator生成器。他可以根据表结构生成migration文件。
用此类工具的时候需要注意:由于是以当前时间点表结构创建的migration,如果自己还有写一些migration,那么要注意冲突或者字段不存在的情况。
例如:我写了migration在user表的avatar字段后面添加status字段,但是用该扩展生成的migration文件里已经包含了status字段。如果再跑这个migration,就会报该字段已存在的错误。

1.2 初始数据
用seeder可以插入默认数据。我使用了orangehill/iseed这个扩展来生成初始数据。
这里要注意一点,由于它是根据表名的顺序来生成seeder的,如果使用了外键约束,那么在往前面的表插入数据的时候会报关联错误Integrity constraint violation。

  1. 分清楚要测试的模块、分清楚测试的先后顺序。
    订单都没有,也不可能测支付。
  2. 写清楚每个测试的步骤
    例如,先创建才能编辑/删除。

Laravel6 启动dusk时遇到JSON decoding of remote response failed

今天第一次使用Laravel Dusk来写UI测试。

按照文档安装好dusk,使用php artisan dusk尝试跑测试后,报了以下错误:

Facebook\WebDriver\Exception\WebDriverException: JSON decoding of remote response failed.
Error code: 4
The response: ''

搜索了一圈,在这个链接找到一个解决方法。需要先用./vendor/laravel/dusk/bin/chromedriver-mac-intel --port=9515这个命令启动chrome,再跑php artisan dusk才可以。(我用的是Intel版的mac,其他版本有对应的chrome driver)

我觉得很奇怪,dusk命令居然还要我手动启动chrome的吗?

后来试了一下关闭启动了的chromedriver,并在dusk命令前添加了sudo:sudo php artisan dusk
果然代码可以跑通了。

但我看chromedriver-mac-intel文件是-rwxr-xr-x,不应该启动不了啊?

在网上搜索了一圈,说要用php artisan dusk:chrome-driver --proxy=0.0.0.0:8888命令先安装chrome driver,但文件是存在的。太奇怪了。安装了之后,再跑php artisan dusk,现在报的错就不一样了:

Facebook\WebDriver\Exception\UnknownErrorException: unknown error: Chrome failed to start: exited abnormally.
  (unknown error: DevToolsActivePort file doesn't exist)
  (The process started from chrome location ./vendor/laravel/dusk/bin/chromedriver-mac-intel is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

在网上搜索了第二圈,说安装了之后要重启才行。俗话说重启大法好,那我就重启看看吧。

重启之后果然就好了……

格式化所有项目里的所有php文件

  1. 先列出所有php文件,保存到php.txt中。git ls-files |grep \.php$ > php.txt
  2. phpfmt插件目录拷贝fmt.phar到项目根目录。
  3. 保存一下文件为format.sh
#!/bin/bash
while IFS= read -r file
do
    [ -f "$file" ] && php fmt.phar --psr2 --smart_linebreak_after_curly "$file" #php-cs-fixer fix --rules=@PSR2,-phpdoc_align,@Symfony,-unary_operator_spaces --rules='{"concat_space":{"spacing":"one"}}' "$file"
done < "./php.txt"
  1. bash format.sh就好了。