phpunit 如何解决测试需要用户登录的api接口

iopkq999
  • 16

问题描述

自己公司搭建的框架,并非Laravel
phpunit做自动化测试,测试api接口,我在setUp方法使用登录方法进行登录,
然后新建一个方法去测试需要用户登录的api接口,例如查看用户自己的文章这个接口
结果报以下错误

Cannot modify header information - headers already sent by (output started at /Users/pengpn/php/wwwroot/yesaway/ims/vendor/phpunit/phpunit/src/Util/Printer.php:109)

登录方法里面有setCookie 设置用户登录的cookie

问题出现的环境背景及自己尝试过哪些方法

自己公司搭建的框架,并非Laravel
有些接口方法里面需要判断了有没有用户登录信息的,没有用户登录信息就返回user error的,所以在做phpunit测试的时候,我想测试这些接口,就需要进行所谓的模拟用户登录。
尝试过使用./vendor/bin/phpunit --stderr 加了--stderr是没有报那个错了,但是setCookie没有设置cookie了

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)


class ItineraryServiceTest extends ApiTestCase
{
    public function setUp()
    {
        $params = [
            'type' => 'email',
            'email' => '312924860@qq.com',
        ];
        $this->userLogin($params);
    }
    public function testGetItineraryList()
    {
        $itineraryService = new ItineraryService();
        $list = $itineraryService->getItineraryList();
        $this->assertArrayHasKey('current',$list['data']);

    }
}

Login的设置cookie方法

public function setLoginCookieCache($userInfo, $lifeTime = 2592000)
    {
        $sessionId = md5($userInfo['user_id'] . 'xxx_pc_user');

        $cacheKey = 'user_' . md5($userInfo['user_id']);

        $this->C['cache']->set($cacheKey, $userInfo, $lifeTime);

        setcookie('xxx_pc_user', json_encode(array('key' => $sessionId, 'info' => $userInfo)), time() + (int)$lifeTime, '/', $this->host);
        
    }

你期待的结果是什么?实际看到的错误信息又是什么?

Cannot modify header information - headers already sent by (output started at /Users/pengpn/php/wwwroot/yesaway/ims/vendor/phpunit/phpunit/src/Util/Printer.php:109)
回复
阅读 3.3k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏