## 插件测试
当你的插件完成了开发和打包,请务必使用FastAdmin完整包进行全新离线插件测试。
### 测试准备
首先需要开启调试模式,打开`application/config.php`,将`app_debug`的值置为`true`。
同时需要开启`允许安装未知来源插件压缩包`这个配置,打开`application/config.php`,将`unknownsources`的值置为`true`。
如果上述设置后仍然不能进行离线安装测试,分两种情况:
1、插件已上架,请检查你插件管理中登录的账号是否匹配当前插件
2、插件未上架,请检查插件标识是否被占用,如果被占用也是无法离线安装
应用标识占用检测:https://www.fastadmin.net/developer/idcheck.html
如果离线安装时提示`无法解压zip文件`,请检查你的压缩包文件是否损坏、插件目录是否嵌套(压缩包应该是直接压缩插件文件,不允许嵌套文件夹)、站点目录是否有权限(`application、public、addons、runtime`目录必须有写权限)。
### 完整包测试
FastAdmin完整包下载地址https://www.fastadmin.net/download/full.html
注意使用完整包,测试时请使用全新的数据库进行测试,而不是使用已有的数据库进行测试。
同时务必在`PHP7.4`和`Mysql 5.7`下进行相关功能测试,MySQL需开启严格模式。
### 二级目录
插件必须支持在二级目录下能正常浏览,因此务必在二级目录下完成相关功能测试。
重点检查在二级目录时加载的图片、JS、样式等资源是否正确。
### 深色模式测试
插件强烈建议适配深色模式,请参考深色适配文档:https://doc.fastadmin.net/darktheme/2850.html
### 测试检查点
插件安装、禁用、卸载、卸载并删除数据表、菜单是否正常
伪静态环境下是否能正确浏览
二级目录下相关请求地址是否正确
二级目录下图片、JS是否正确
检查插件代码中缓存的设置和获取是否添加插件标识标签
检查插件所有代码是否以`utf8`编码,不能存在以`utf8-bom`编码的文件
检查插件中文件名大小写是否正确
检查插件代码中的`默认密钥`、`默认Appid`、`默认Key`等配置是否去除
检查逻辑代码中是否有写`硬编码(固定参数)`的配置,请务必后台可配置化
检查逻辑代码中API接口地址的域名占位,只允许使用`www.example.com`占位
检查逻辑代码不允许使用固定的数据表前缀,例如`fa_user`
检查逻辑代码不允许使用`$("选择器").size()`判断大小,请使用`$("选择器").length`进行判断
检查逻辑代码中获取参数`rawData`和`encrytedData`是否有做特殊处理(不进行转义)
检查逻辑代码中`Db::query`和`Db::execute`拼接的SQL是否有安全隐患
检查逻辑代码`try catch`捕获异常时在`try`中不允许出现`$this->success()`和`$this->error()`
检查逻辑代码中模型对象是否有使用`$model->type`来获取或设置相关值,`type`为私有属性,更多私有属性请查看ThinkPHP模型基类`Model.php`
检查逻辑代码`$this->success()`和`$this->error()`前不允许添加`return`
检查逻辑代码中是否有实例化控制器的用法,不允许手动实例化控制器,然后调用控制器的方法
检查逻辑代码中涉及金额计算是否有正确使用`bcmath`的相关方法进行精度 处理
检查逻辑代码中调用的方法命名是否规范,不允许`abc_def`和`abcDef`混用
检查逻辑代码中补全图片等资源前缀时必须使用`cdnurl("图片URL", true);`进行补全
检查逻辑代码中调用的方法是否严格区分大小写(包括但不限于文件名、类名、命名空间)
检查Uniapp中的`manifest.json`文件中的`App权限配置`中是否移除与应用无关的权限
移除无关的冗余代码、脚本、注释等
移除需授权的代码、文字、图片、图片上的文字、字体等资源
移除插件目录的`.addonrc`文件
移除插件目录下`标识.php`中的`testhook`方法
移除插件目录下`config.php`中的冗余配置信息
移除Uniapp项目目录下的`unpackage`目录
移除插件目录代码中的默认配置
### 数据库检查
`install.sql`和`testdata.sql`中不能包含`DROP TABLE`语句
`install.sql`和`testdata.sql`中不能包含`DELETE FROM`语句
`install.sql`和`testdata.sql`中`CREATE TABLE`不能包含`ROW_FORMAT=DYNAMIC`参数
`install.sql`和`testdata.sql`中`CREATE TABLE`必须加上`IF NOT EXISTS`判断
`install.sql`和`testdata.sql`中的数据库前缀必须用`__PREFIX__`,不能使用固定前缀`fa_`
`install.sql`和`testdata.sql`中的时间字段如保存`时间戳`,字段类型必须使用`bigint(16)`,不能使用`int(10)`,且默认值不能为`0`,默认值应当为`NULL`
`install.sql`和`testdata.sql`中的数据表字段字符集请使用`utf8mb4_general_ci`
### 升级测试
首先安装旧版本,然后卸载插件(不删除数据库数据),再本地安装新版本测试数据库是否正常升级、菜单是否正确升级
务必更新`info.ini`中的版本号
务必删除插件目录下的`.addonrc`文件