【问题标题】:Laravel phpunit testing needs access to API Service for user validationLaravel phpunit 测试需要访问 API 服务进行用户验证
【发布时间】: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 服务?

【问题讨论】:

    标签: laravel api service phpunit


    【解决方案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 登录才能访问页面的每个测试用例中调用登录函数。

    这最终比我想象的要简单得多,但花了一些时间才到达那里。希望这对其他人有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-02
      • 2018-05-30
      • 2016-06-04
      • 1970-01-01
      • 2018-03-27
      • 1970-01-01
      • 2021-11-01
      • 2015-09-01
      相关资源
      最近更新 更多