Php 如何使用Codeception测试Laravel5API?
我是Codeception的新手,我正在尝试测试我使用Laravel5构建的web服务。我跟着导游走 因此,我首先创建了一个名为api的套件:Php 如何使用Codeception测试Laravel5API?,php,laravel,laravel-5,codeception,Php,Laravel,Laravel 5,Codeception,我是Codeception的新手,我正在尝试测试我使用Laravel5构建的web服务。我跟着导游走 因此,我首先创建了一个名为api的套件: codecept generate:suite api api.suite.yml class_name: ApiTester modules: enabled: - REST: url: http://localhost:8000/api/ depends: Laravel5
codecept generate:suite api
api.suite.yml
class_name: ApiTester
modules:
enabled:
- REST:
url: http://localhost:8000/api/
depends: Laravel5
class_name: ApiTester
modules:
enabled:
- REST:
url: http://localhost:8000/api/
depends: Laravel5
config:
Laravel5:
environment_file: .env.testing
AuthenticateUserCept.php
<?php
$I = new ApiTester($scenario);
$I->wantTo('authenticate a user');
$I->haveHttpHeader('Content-Type', 'application/x-www-form-urlencoded');
$I->sendPOST('/authenticate', [
'username' => 'archive',
'email' => 'admin@admin.com',
'password' => 'password'
]);
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
我哪里做错了?此外,我还不清楚如何重构这个特定的测试,以便为我提出的其他请求提供一个JWT。感谢您的帮助
编辑api.suite.yml中的更改
class_name: ApiTester
modules:
enabled:
- REST:
url: http://localhost:8000/api/
depends: Laravel5
class_name: ApiTester
modules:
enabled:
- REST:
url: http://localhost:8000/api/
depends: Laravel5
config:
Laravel5:
environment_file: .env.testing
在我回答之前,我想提出一些意见:
- 在api.suite.yml中的enabled行上,我包括:enabled:[PhpBrowser,REST,ApiHelper,Asserts]
- REST行中的url对API套件没有任何影响,它通常只用于验收套件。这应该是通过直接进入代码的路由完成所有操作,而不是使用phpbrowser模式或类似的方式进行HTTP调用
- 不使用PhpBrowser模式,您可以使用Laravel5模式——前者将通过中间件发送请求,如果APP_ENV设置为testing,Laravel5模式将不会通过中间件发送请求
另一种可能的查询方式是构建一个功能测试,测试相同的路径。通过Laravel5 helper模块进行的功能测试通常更容易工作和调试。一旦您有了一个基本的功能测试,并解决了您遇到的任何问题,那么就可以更容易地让API测试工作。感谢您的精彩见解。所以我继续,这次将POST请求更改为
/api/authenticate
。因此,我深入研究了测试的输出。我发现一个检查令牌以评估有效负载的中间件把事情搞砸了,但是中间件不应该对/api/authenticate
起作用,原因很明显。但是,当我从内核评论中间件时,它运行良好。如何解决此问题?请将其放入您的api.suite.yml:config:Laravel5:environment\u文件中:.env.testing在您的文件中。env.testing,请确保已设置:APP\u env=testing,否则它应与您的.env文件相同。默认情况下,当APP_ENV=测试中间件未运行时。你可以在个案的基础上重新启用它,但这应该可以解决你的问题。我不确定我是否了解全部情况。我更改了配置文件,我甚至会编辑我的答案以包含这些更改。我创建了.env.testing并将APP\u env
设置为testing。但我不明白你说的中间件是什么意思。测试仍然失败。试图解析不应该解析的令牌的中间件。一旦我在内核中对中间件进行了注释,它就通过了,但这不是我想要解决的问题。中间件查看请求是否为api/authenticate
,然后跳过。可能codeception没有执行HTTP请求?它用另一种方式实现。我很困惑。我在REST依赖项中将Laravel5更改为PhpBrowser。Laravel5模块没有模拟真实的HTTP请求,这就是中间件没有正确运行的原因。PhpBrowser显然模拟了真实的HTTP请求。请用这些信息更新答案,我会接受的。谢谢您提供的其他信息。:)好的,请注意——在某些情况下,如果默认情况下不希望启用中间件,则最好使用Laravel5模块。您始终可以专门为任何给定的测试启用或禁用中间件。