编码功能测试未通过



好的,我有一个简单的按钮,可以触发AJAX POST请求,以便从数据库中删除某些内容。我不想使用简单的 HTML 链接来与最佳实践保持一致(仅使用 POST 来修改应用程序的状态)。

无论如何,这里是按钮。

<?= Html::button('delete', ['class' => 'btn btn-primary', 'id' => 'deltoday']) ?>

这是它触发的 js。

$(document).ready(function() { 
$('#deltoday').on('click', function () {
$.ajax({
url: 'delete',
type: 'POST' 
});
});
});

这是控制器操作

if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
$today = Today::findOne(['user_id' => Yii::$app->user->id]);
if ($today->delete()) {
return $this->redirect('new-today');
}
}

最后,这是Codeception中的测试

$user = $I->grabFixture('user', 'user1');
$today = $I->grabFixture('today', '1');
$I->amLoggedInAs($user);
$I->amOnRoute('today/my-today');
$I->see($today['response']);
$I->click('#deltoday');
$I->seeInCurrentUrl('today/new-today');
$I->dontSeeRecord('frontendmodelsToday', array('user_id' => $user['id']));

当我手动在实际应用程序上执行操作时,它按预期工作,但是,测试在Codeception中失败。

我的想法是Codeception不喜欢Ajax请求,但是,我还有另一个测试使用Yii2的pjax功能,可以正常工作。也许是重定向?此外,鉴于 pjax 有效(并且正常替换 HTML 中的内容),我想避免使用验收测试。

我真的很想让这个测试工作并了解我在这里做错了什么(因为我将来需要类似的测试)。任何和所有的帮助将不胜感激。

我确实认为您需要为此进行验收测试。

功能测试与 PHPBrowser一起使用,但 PHPBrowser 不支持 javascript,根据本页的表格:

https://codeception.com/docs/03-AcceptanceTests#Sample-Scenario

当然,你的AJAX使用的是Javascript:)

最新更新