在使用 Laravel 5.2 和 Postgresql 进行 api 测试后,Codeception 进行了奇怪的回滚
Codeception making weird rollback after api test with Laravel 5.2 & Postgresql
我在 Laravel 中使用代码接收时遇到错误。即使我在邮递员中测试了路由并且它有效,它也没有插入,我还调试了控制器以查看它是否被异常捕获但它没有,而且我知道它没有插入是因为 $I-> seeInDatabase() 方法,但 table 中 id 的自动增量确实增加了。如果我使用邮递员进行测试,它也会坚持插入(如果我 运行 在邮递员之前使用代码接受测试,则使用递增的 id)。这是我的测试:
public function RegistrarCorrectamente(ApiTester $I) //200
{
$I->wantTo('Registrarse correctamente');
$I->sendPOST($this->url, [
'email' => 'tester123@gmail.com',
'first_name' => 'Prueba4',
'last_name' => 'Probador',
'community_id' => 2,
]);
$I->seeInDatabase('app.users_x_communities', array('email' => 'tester123@gmail.com'));
$I->seeInDatabase('app.users', array('first_name' => 'Prueba4'));
/*$this->checkResponseCode($I, HttpCode::OK);*/
$I->seeResponseIsJson();
$I->seeResponseContainsJson(array(
'estado' => true,
));
}
seeInDatabase 方法看不到插入。
知道如何解决这个问题吗?另外,这是我的 yml 文件和 .env:
api.suite.yml:
class_name: ApiTester
modules:
enabled:
- \Helper\Api
- Asserts
- Laravel5
- Db
- REST:
url: http://localhost:8000/api/
depends: Laravel5
config:
Laravel5:
environment_file: .env.testing
codeception.yml:
actor: Tester
paths:
tests: tests
log: tests/_output
data: tests/_data
support: tests/_support
envs: tests/_envs
settings:
bootstrap: _bootstrap.php
colors: false
memory_limit: 1024M
extensions:
enabled:
- Codeception\Extension\RunFailed
modules:
config:
Db:
dsn: 'pgsql:host=localhost;port=5432;dbname=movers'
user: 'postgres'
password: '1234'
.env.testing:
APP_ENV=testing
APP_KEY=base64:WRVmtVKixE3/MQ5bcDA3rrEaYqCavwaoleuRkcZtc4w=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=movers
DB_USERNAME=postgres
DB_PASSWORD=1234
API_VERSION=v1
API_NAME="Movers API"
API_PREFIX=api
API_STANDARDS_TREE=vnd
API_SUBTYPE=movers
API_DEBUG=true
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
澄清一下,我已经尝试过清理(真和假)和填充(真和假)。
提前致谢!
Laravel5 模块在事务内部运行测试然后回滚:
cleanup: boolean, default true - all database queries will be run in a transaction, which will be rolled back at the end of each test.
db模块看不到记录,因为它使用了单独的数据库连接。
使用 Laravel 模块的 seeRecord 方法或禁用清理。
我在 Laravel 中使用代码接收时遇到错误。即使我在邮递员中测试了路由并且它有效,它也没有插入,我还调试了控制器以查看它是否被异常捕获但它没有,而且我知道它没有插入是因为 $I-> seeInDatabase() 方法,但 table 中 id 的自动增量确实增加了。如果我使用邮递员进行测试,它也会坚持插入(如果我 运行 在邮递员之前使用代码接受测试,则使用递增的 id)。这是我的测试:
public function RegistrarCorrectamente(ApiTester $I) //200
{
$I->wantTo('Registrarse correctamente');
$I->sendPOST($this->url, [
'email' => 'tester123@gmail.com',
'first_name' => 'Prueba4',
'last_name' => 'Probador',
'community_id' => 2,
]);
$I->seeInDatabase('app.users_x_communities', array('email' => 'tester123@gmail.com'));
$I->seeInDatabase('app.users', array('first_name' => 'Prueba4'));
/*$this->checkResponseCode($I, HttpCode::OK);*/
$I->seeResponseIsJson();
$I->seeResponseContainsJson(array(
'estado' => true,
));
}
seeInDatabase 方法看不到插入。
知道如何解决这个问题吗?另外,这是我的 yml 文件和 .env:
api.suite.yml:
class_name: ApiTester
modules:
enabled:
- \Helper\Api
- Asserts
- Laravel5
- Db
- REST:
url: http://localhost:8000/api/
depends: Laravel5
config:
Laravel5:
environment_file: .env.testing
codeception.yml:
actor: Tester
paths:
tests: tests
log: tests/_output
data: tests/_data
support: tests/_support
envs: tests/_envs
settings:
bootstrap: _bootstrap.php
colors: false
memory_limit: 1024M
extensions:
enabled:
- Codeception\Extension\RunFailed
modules:
config:
Db:
dsn: 'pgsql:host=localhost;port=5432;dbname=movers'
user: 'postgres'
password: '1234'
.env.testing:
APP_ENV=testing
APP_KEY=base64:WRVmtVKixE3/MQ5bcDA3rrEaYqCavwaoleuRkcZtc4w=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=movers
DB_USERNAME=postgres
DB_PASSWORD=1234
API_VERSION=v1
API_NAME="Movers API"
API_PREFIX=api
API_STANDARDS_TREE=vnd
API_SUBTYPE=movers
API_DEBUG=true
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
澄清一下,我已经尝试过清理(真和假)和填充(真和假)。
提前致谢!
Laravel5 模块在事务内部运行测试然后回滚:
cleanup: boolean, default true - all database queries will be run in a transaction, which will be rolled back at the end of each test.
db模块看不到记录,因为它使用了单独的数据库连接。
使用 Laravel 模块的 seeRecord 方法或禁用清理。