Php Codeception请求返回意外响应?
我正在尝试使用Codeception测试我的API,我正在测试每个端点。我的测试是这样的:Php Codeception请求返回意外响应?,php,laravel,laravel-5,codeception,Php,Laravel,Laravel 5,Codeception,我正在尝试使用Codeception测试我的API,我正在测试每个端点。我的测试是这样的: <?php $faker = Faker\Factory::create(); $I = new ApiTester($scenario); $I->wantTo('create a new user'); $I->useToken(); $I->sendPost('users', [ "first_name" => "Test", "last_na
<?php
$faker = Faker\Factory::create();
$I = new ApiTester($scenario);
$I->wantTo('create a new user');
$I->useToken();
$I->sendPost('users', [
"first_name" => "Test",
"last_name" => "Test",
"email" => 'test@test.com',
"password" => "testing",
"role" => "1"
]);
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(['status' => 'success']);
$I->seeResponseContainsJson(['data' => [
'first_name' => 'Test'
]]);
$I->seeInDatabase('user', [
"first_name" => "Test",
"last_name" => "Test",
"email" => 'test@test.com'
]);
此外,我还有其他测试,如:
<?php
$I = new ApiTester($scenario);
$I->wantTo('create a new comment');
$I->useToken();
$I->sendPost('comments', [
"document_id" => "1",
"comment_type_id" => "1",
"user_id" => "1",
"body" => "Testing"
]);
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(['status' => 'success']);
$I->seeInDatabase('comment', [
"document_id" => "1",
"comment_type_id" => "1",
"user_id" => "1",
"body" => "Testing"
]);
api.suite.yml
actor: Tester
paths:
tests: tests
log: tests/_output
data: tests/_data
support: tests/_support
envs: tests/_envs
settings:
bootstrap: _bootstrap.php
colors: true
memory_limit: 1024M
extensions:
enabled: [Codeception\Extension\RunFailed]
modules:
config: { Db: { dsn: 'mysql:host=localhost;dbname=carparts', user: homestead, password: secret, dump: tests/_data/dump.sql } }
class_name: ApiTester
modules:
enabled:
- Laravel5
- Db
- PhpBrowser:
url: 'http://archive.app/api'
curl:
CURLOPT_RETURNTRANSFER: true
- REST:
url: /api/
depends: PhpBrowser
config:
Laravel5:
environment_file: .env.testing
ApiTester.php
class ApiTester extends \Codeception\Actor
{
use _generated\ApiTesterActions;
/**
* Define custom actions here
*/
public function saveToken($response)
{
file_put_contents('tests/api/token', json_decode($response)->token);
}
public function saveSuperToken($response)
{
file_put_contents('tests/api/superToken', json_decode($response)->token);
}
public function saveFakeToken($response)
{
file_put_contents('tests/api/fakeToken', json_decode($response)->token);
}
public function useToken()
{
$I = $this;
$I->haveHttpHeader('Authorization', 'Bearer ' . file_get_contents('tests/api/token'));
}
public function useSuperToken()
{
$I = $this;
$I->haveHttpHeader('Authorization', 'Bearer ' . file_get_contents('tests/api/superToken'));
}
public function useFakeToken()
{
$I = $this;
$I->haveHttpHeader('Authorization', 'Bearer ' . file_get_contents('tests/api/fakeToken'));
}
}
--调试选项输出
[Request headers] {"Authorization":"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImNhcnBhcnRzIiwic3ViIjoxLCJpc3MiOiJodHRwOlwvXC9hcmNoaXZlLmFwcFwvYXBpXC9hdXRoZW50aWNhdGUiLCJpYXQiOjE0NTAwODg5NzMsImV4cCI6MTQ1MDE0Mjk3MywibmJmIjoxNDUwMDg4OTczLCJqdGkiOiIxOTM4YmU0OWZhZjIyMTE5ZjJhZDY0ZDAwOTJhZTExOSJ9.Gsc0Acxq7QPMOejMHRJ4yCYAhxnDUscGqo1-NbT7gIM"}
[Request] POST /api/users {"first_name":"Test","last_name":"Test","email":"test@test.com","password":"testing","role":"1"}
[Response] {"status":"error","data":[null],"errors":null,"message":"404 Route Not Found"}
[Cookies] {"laravel_session":"eyJpdiI6Im03Smh5VUZJMEdJVUVjVDZxRlpzVVE9PSIsInZhbHVlIjoiWHF2aTQ5MXZWbnl2eU5OREc4cDhmOENEeUlGRzRKbVpuYXFQeW9WMlVzQjRUT2hTZldWVnJ4SmVFTEJ3Y1lKblwvQWlWalhWSkVEUW95b0t2QkxkTDJBPT0iLCJtYWMiOiI2N2MwYmM3N2JjZTI5NWE2NjAyMWY3OWI3ZDJkMDQzNGU5ZTk2ODBkNmNiNmRhZWVhOTdlZmEzYWUyNDI4YzA3In0="}
[Headers] {"Server":["nginx/1.8.0"],"Content-Type":["application/json"],"Transfer-Encoding":["chunked"],"Connection":["keep-alive"],"Cache-Control":["no-cache"],"Date":["Mon, 14 Dec 2015 10:29:55 GMT"]}
[Status] 200
你能给我们一个有效的邮递员的屏幕截图吗?
此问题的可能原因是在api.suite.yml中启用了Laravel5模块 Laravel5(和其他框架模块)与PhpBrowser不兼容,启用两者是一个非常常见的问题
请参见ResponseCodeis
方法由Laravel5、PhpBrowser和REST模块提供。客户端在REST模块和它所依赖的模块之间共享,但很可能是由Laravel5提供的seeResponseCodeIs被ApiTester使用
解决方案是从该套件中删除Laravel5模块。您在Postman中发布的原始数据是什么样子的?我很困惑。我怎么检查?你的助手有什么东西吗?您的yaml文件是什么样子的?您是否在助手中定义了sendpost,是否正在使用rest模块?添加了所有额外信息。:)在我看来,这是一个测试环境的路由问题。当您使用Postman时,是否已将环境设置为测试?你所有的路线都是按照你所展示的那样定义的吗?或者你是根据环境设置来定义的吗?我使用的是身体的表单数据,所以当我切换到raw时,我什么也看不到。它是空白的。
[Request headers] {"Authorization":"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImNhcnBhcnRzIiwic3ViIjoxLCJpc3MiOiJodHRwOlwvXC9hcmNoaXZlLmFwcFwvYXBpXC9hdXRoZW50aWNhdGUiLCJpYXQiOjE0NTAwODg5NzMsImV4cCI6MTQ1MDE0Mjk3MywibmJmIjoxNDUwMDg4OTczLCJqdGkiOiIxOTM4YmU0OWZhZjIyMTE5ZjJhZDY0ZDAwOTJhZTExOSJ9.Gsc0Acxq7QPMOejMHRJ4yCYAhxnDUscGqo1-NbT7gIM"}
[Request] POST /api/users {"first_name":"Test","last_name":"Test","email":"test@test.com","password":"testing","role":"1"}
[Response] {"status":"error","data":[null],"errors":null,"message":"404 Route Not Found"}
[Cookies] {"laravel_session":"eyJpdiI6Im03Smh5VUZJMEdJVUVjVDZxRlpzVVE9PSIsInZhbHVlIjoiWHF2aTQ5MXZWbnl2eU5OREc4cDhmOENEeUlGRzRKbVpuYXFQeW9WMlVzQjRUT2hTZldWVnJ4SmVFTEJ3Y1lKblwvQWlWalhWSkVEUW95b0t2QkxkTDJBPT0iLCJtYWMiOiI2N2MwYmM3N2JjZTI5NWE2NjAyMWY3OWI3ZDJkMDQzNGU5ZTk2ODBkNmNiNmRhZWVhOTdlZmEzYWUyNDI4YzA3In0="}
[Headers] {"Server":["nginx/1.8.0"],"Content-Type":["application/json"],"Transfer-Encoding":["chunked"],"Connection":["keep-alive"],"Cache-Control":["no-cache"],"Date":["Mon, 14 Dec 2015 10:29:55 GMT"]}
[Status] 200