【问题标题】:Check if the API returns a token in Laravel (Unit testing)检查 API 是否在 Laravel 中返​​回令牌(单元测试)
【发布时间】:2016-02-27 13:31:14
【问题描述】:

我尝试在 Laravel 中编写测试。我提交了 4 个字段,我想检查我是否收到了一个令牌作为响应。 我知道我知道,但我不知道如何在测试中检查它。

public function testSignup()
{

    $this->json('POST', '/api/auth/signup',[
        'prenom' => 'TestPrenom',
        'nom' => 'TestNom',
        'email' => 'courriel@courriel.com',
        'password' => 'motdepasse'
        ])->seeJson(['token']);

}

作为参考,这是我运行测试时遇到的错误:

有 1 次失败:

1) SignupTest::testSignup
Unable to find JSON fragment [["token"]] within [{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjEsImlzcyI6Imh0dHA6XC9cL2xvY2FsaG9zdFwvYXBpXC9hdXRoXC9zaWdudXAiLCJpYXQiOjE0NTY1Nzk2MTAsImV4cCI6MTQ1NjU4MzIxMCwibmJmIjoxNDU2NTc5NjEwLCJqdGkiOiI3YTlmODFmZDA3ZDc2NDdlZTA4NTE5NTgzYWFhZTRlYSJ9.P3SUqxpf1vTfWmSFH4aTC9GESloYTutFNOBpw0xgrjA"}].
Failed asserting that false is true.

/home/ubuntu/workspace/zoneapi/vendor/laravel/framework/src/Illuminate/Foundation/Testing/CrawlerTrait.php:262
/home/ubuntu/workspace/zoneapi/vendor/laravel/framework/src/Illuminate/Foundation/Testing/CrawlerTrait.php:221
/home/ubuntu/workspace/zoneapi/tests/SignupTest.php:22

我尝试使用 seeJsonStructure() 方法,但出现未定义方法错误。见这里:

PHPUnit 4.8.23 by Sebastian Bergmann and contributors.



  [Symfony\Component\Debug\Exception\FatalErrorException]  
  Call to undefined method SignupTest::seeJsonStructure()  



Fatal error: Call to undefined method SignupTest::seeJsonStructure() in /home/ubuntu/workspace/zoneapi/tests/SignupTest.php on line 22

Call Stack:
    0.0002     237272   1. {main}() /home/ubuntu/workspace/zoneapi/vendor/phpunit/phpunit/phpunit:0
    0.0214    1801432   2. PHPUnit_TextUI_Command::main() /home/ubuntu/workspace/zoneapi/vendor/phpunit/phpunit/phpunit:47
    0.0214    1802056   3. PHPUnit_TextUI_Command->run() /home/ubuntu/workspace/zoneapi/vendor/phpunit/phpunit/src/TextUI/Command.php:100
    0.3897    6474744   4. PHPUnit_TextUI_TestRunner->doRun() /home/ubuntu/workspace/zoneapi/vendor/phpunit/phpunit/src/TextUI/Command.php:149
    0.4090    6694592   5. PHPUnit_Framework_TestSuite->run() /home/ubuntu/workspace/zoneapi/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:440
    0.4095    6710712   6. PHPUnit_Framework_TestSuite->run() /home/ubuntu/workspace/zoneapi/vendor/phpunit/phpunit/src/Framework/TestSuite.php:747
    0.4227    6714992   7. PHPUnit_Framework_TestCase->run() /home/ubuntu/workspace/zoneapi/vendor/phpunit/phpunit/src/Framework/TestSuite.php:747
    0.4228    6716632   8. PHPUnit_Framework_TestResult->run() /home/ubuntu/workspace/zoneapi/vendor/phpunit/phpunit/src/Framework/TestCase.php:724
    0.4245    6784448   9. PHPUnit_Framework_TestCase->runBare() /home/ubuntu/workspace/zoneapi/vendor/phpunit/phpunit/src/Framework/TestResult.php:612
    0.6029   14322288  10. PHPUnit_Framework_TestCase->runTest() /home/ubuntu/workspace/zoneapi/vendor/phpunit/phpunit/src/Framework/TestCase.php:768
    0.6030   14323048  11. ReflectionMethod->invokeArgs() /home/ubuntu/workspace/zoneapi/vendor/phpunit/phpunit/src/Framework/TestCase.php:909
    0.6030   14323128  12. SignupTest->testSignup() /home/ubuntu/workspace/zoneapi/vendor/phpunit/phpunit/src/Framework/TestCase.php:909

Laravel test documentation

【问题讨论】:

    标签: php unit-testing laravel


    【解决方案1】:

    尝试使用:

    ->seeJsonEquals(['token' => 'yourvalue']);
    

    【讨论】:

    • 但无论值是多少,我都希望测试为真。如果是 * 值,则为类型
    • 你能发布完整的输出:seeJsonStructure(['token']) 吗?
    • @LucienDubois 你确定你使用最新的 laravel 版本吗?检查您的MakesHttpRequests.phporiginal
    • 这个答案从未更新,所以它看起来仍然是一个建议。
    【解决方案2】:

    如果您尝试测试 JSON 响应是否具有某个键,并且您不关心该值是什么,因为它无法事先确定,请使用 seeJsonStructure(['array_key_name'])

    OP 的示例如下所示:

    public function testSignup()
    {
    
        $this->json('POST', '/api/auth/signup',[
            'prenom' => 'TestPrenom',
            'nom' => 'TestNom',
            'email' => 'courriel@courriel.com',
            'password' => 'motdepasse'
            ])->seeJsonStructure(['token']);
    
    }
    

    seeJsonStructure 上的文档似乎在 Laravel 5.2 之后悄然消失了

    https://laravel.com/docs/5.2/testing#testing-json-apis

    https://github.com/laravel/framework/issues/17706

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 2017-09-30
      • 2022-10-20
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 2012-02-03
      • 2018-03-27
      相关资源
      最近更新 更多