Laravel phpunit 测试需要访问 API 服务进行用户验证
Posted
技术标签:
【中文标题】Laravel phpunit 测试需要访问 API 服务进行用户验证【英文标题】:Laravel phpunit testing needs access to API Service for user validation 【发布时间】:2021-03-23 04:01:34 【问题描述】:我正在开发一个 Laravel 项目,该项目正在访问用于所有后端数据存储的 API。这包括用户身份验证。
我有一个 API 服务以及一个 API 服务提供者,它证实了该服务,然后将该服务提供给带有请求变量的所有页面。
我认为在测试类中证实 API 服务更容易,这就是我正在做的事情,但我遇到了会话问题。
这是我目前所拥有的:
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
use App\Services\ApiService;
class LoginTest extends TestCase
private $apiService;
public function __construct()
$this->withSession(['user' => '', 'auth_token' => '']);
$url = env('API_URL');
$this->$apiService = new ApiService($url);
我收到此错误: 在 null 上调用成员函数 isStarted()。
有没有更好的方法来调用依赖会话变量进行测试的 API 服务?
【问题讨论】:
【参考方案1】:我们最终是如何做到的:
我们将构造函数更改为 parent::SetUp 以调用 API 服务
public function setUp(): void
parent::setUp();
$url = env('API_URL');
$this->ApiService = new ApiService($url);
然后在测试/TestCase 中,我们调用了登录后路由,传递了硬编码的测试用户名和密码信息。
public function login()
$this->post("/login", ['email' => 'admin@big-api.test', 'password' => 'ThisUserWillBeDeleted']);
现在我只需在我需要通过 API 登录才能访问页面的每个测试用例中调用登录函数。
这最终比我想象的要简单得多,但花了一些时间才到达那里。希望这对其他人有帮助。
【讨论】:
以上是关于Laravel phpunit 测试需要访问 API 服务进行用户验证的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Laravel 中的 PHPUnit 不能访问存在的路由?
仅当访问 Laravel 5 中的根页面( visit('/') )时,PHPUnit 测试才会失败
如何在 laravel 5.5 中使用 phpunit 测试中间件?
phpunit 测试资源 laravel 5.5 返回集合而不是 json