Cakephp 3-IntegrationTestTrait中的查询装置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cakephp 3-IntegrationTestTrait中的查询装置相关的知识,希望对你有一定的参考价值。

我在查询TestCase中已加载的Fixture时遇到IntegrationTestTrait时遇到问题。我想验证夹具中是否已存在记录,然后插入重复记录并验证数据库中仍然只有1条记录。

在测试用例初始化期间,我设置了用于身份验证的会话变量。

    public function setUp() 
        parent::setUp();

        $this->loadFixtures(
            'Students', 'Users');

        // Configure Authentication
        $this->session([
            'Auth' => [
                'User' => [
                    'id' => 21896, 
                    'institution_id' => 1, 
                    'student_id' => null,
                    'contact_id' => 91, 
                    'email' => 'AuthenticatedEmail@school.edu', 
                    'role' => 'DSP', 
                    'is_admin' => false 
                ]
            ]
        ]);

        // Load Tables 
        $this->Students = TableRegistry::getTableLocator()->get('Students');

    

在我的测试用例中,我检查数据库是否包含记录,然后提交POST请求,然后进行测试以查看记录是否未插入。

    public function testAddStudentSuccess() 

        $data = [
            'institution_id' => 1, 
            'contact_id' => null, 
            'id_number' => '200XYZ', 
            'last_name' => 'Trimor', 
            'first_name' => 'Paul',
            'email' => '1_test@email.com'
        ];

        // Test Pre-condition 
        $query = $this->Students->find('all')->where([
            'id_number' => $data['id_number']
        ]); 
        $this->assertEquals(1, $query->count());

        $this->post('students/add', $data); 

        // Test Post-condition 
        $this->assertResponseSuccess();
        $query = $this->Students->find('all')->where([
            'id_number' => $data['id_number']
        ]); 
        $this->assertEquals(1, $query->count());
    

但是,当我运行测试用例时,出现以下错误:

Notice Error: Undefined variable: _SESSION in/var/www/html/samusg/src/Model/Table/StudentsTable.php, line 206]

几件事:

  • 最后一个断言有效!提交$this->post('students/add', $data)后,将在$query中填充数据。
  • 第一个断言不起作用。我在调用$this->post()之前调试了夹具,它返回空。
  • 在测试表中,有一个针对$_SESSION变量的测试,这是第206行所引用的。

长话短说:在测试用例开始时,没有用数据填充夹具,但是一旦集成运行,夹具就神奇地包含了所有数据。我收到$ _SESSION错误,但是我已经在setUp()中设置了会话,所以我迷路了。

非常感谢您的帮助。谢谢

答案

我通过直接在我的测试中设置$ _SESSION超级全局变量来传递此消息:

    public function setUp() 
        parent::setUp();

        $this->loadFixtures(
            'Students', 'Users');

        // Configure Authentication
        $this->session([
            'Auth' => [
                'User' => [
                    'id' => 21896, 
                    'institution_id' => 1, 
                    'student_id' => null,
                    'contact_id' => 91, 
                    'email' => 'AuthenticatedEmail@school.edu', 
                    'role' => 'DSP', 
                    'is_admin' => false 
                ]
            ]
        ]);

        $_SESSION = [
            'Auth' => [
                'User' => [
                    'id' => 21896, 
                    'institution_id' => 1, 
                    'student_id' => null,
                    'contact_id' => 91, 
                    'email' => 'AuthenticatedEmail@school.edu', 
                    'role' => 'DSP', 
                    'is_admin' => false 
                ]
            ]
        ];



以上是关于Cakephp 3-IntegrationTestTrait中的查询装置的主要内容,如果未能解决你的问题,请参考以下文章

php [cakephp:mysqldump] mysqldumpのcakephp実装サンプル。#php #cakephp #mysql

ORM如何在CakePHP3中运行

使用 Cakephp-jwt-auth [CakePHP 3] 过期后颁发新令牌

从 cakephp 3.x 迁移到 cakephp 4.x [关闭]

CakePHP 2.2.1 - 在表单上显示 CakePHP 错误 - 自定义验证

php [cakephp:AuthComponent示例] AuthComponent的示例代码。 #cakephp