Php Codeception请求返回意外响应?

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

我正在尝试使用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_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