CMS路由(设置)的SilverStripe功能测试始终返回404以进行POST请求
我正在做一个SilverStripe项目。我正在为我的应用程序编写功能测试。我正在为CMS中的路径编写功能测试。在我的例子中,路径是/admin/settings/SecondaryMenuPages。这是CMS内的路径,因此用户需要登录 这是我的测试课CMS路由(设置)的SilverStripe功能测试始终返回404以进行POST请求,silverstripe,functional-testing,silverstripe-4,Silverstripe,Functional Testing,Silverstripe 4,我正在做一个SilverStripe项目。我正在为我的应用程序编写功能测试。我正在为CMS中的路径编写功能测试。在我的例子中,路径是/admin/settings/SecondaryMenuPages。这是CMS内的路径,因此用户需要登录 这是我的测试课 class MegaMenuTest extends FunctionalTest { protected static $fixture_file = [ 'app/tests/Cms/cms_admin_user_f
class MegaMenuTest extends FunctionalTest
{
protected static $fixture_file = [
'app/tests/Cms/cms_admin_user_fixture.yml',
'app/tests/Cms/secondary_menu_fixture.yml',
];
function testCmsUserCanUnlinkSecondaryMenuItem()
{
$member = $this->objFromFixture(Member::class, 'admin_user');
$adminGroup = $this->objFromFixture(Group::class, 'admin_group');
$this->assignMemberToGroup($member, $adminGroup);
$this->assignPageToSecondaryMenu();
$this->logInAs($member);
$this->post("/admin/settings/SecondaryMenuPages", [
'ID' => 1,
], null, null, json_encode([ 'ID' => 1 ]));
}
private function assignMemberToGroup($member, $adminGroup)
{
$sqlInsert = SQLInsert::create('Group_Members');
$sqlInsert->addRows([
[ '"GroupID"' => $adminGroup->ID, '"MemberID"' => $member->ID ],
]);
$sqlInsert->execute();
}
private function assignPageToSecondaryMenu()
{
$page = $this->objFromFixture('Page', 'page_one');
$siteConfig = $this->objFromFixture(SiteConfig::class, 'siteconfig_one');
$sqlInsert = SQLInsert::create('SiteConfig_SecondaryMenuPages');
$sqlInsert->addRows([
[ '"PageID"' => $page->ID, '"SiteConfigID"' => $siteConfig->ID ],
]);
$sqlInsert->execute();
}
}
从字面上看,页面处于CMS内的设置之下
我在cms_admin_user_fixture.yml文件中为admin用户设定种子,如下所示
SilverStripe\Security\Member:
admin_user:
ID: 1
LastEdited: 2020-03-28 17:15:53
Created: 2019-01-08 17:04:53
FirstName: Default Admin
Email: admin
SilverStripe\Security\Group:
admin_group:
ID: 1
LastEdited: 2019-01-08 17:04:53
Created: 2019-01-08 17:04:53
Title: Administrators
Code: administrators
Locked: 0
SilverStripe\CMS\Model\SiteTree:
sitetree_page_one:
ID: 1
ClassName: Page
Title: Page Title 1
URLSegment: page-url-1
Page:
page_one:
ID: 1
Heading: Page Title 1
Title: Cision form content
URLSegment: page-url-1
SilverStripe\SiteConfig\SiteConfig:
siteconfig_one:
ID: 1
LastEdited: 2020-03-10 12:25:37
Created: 2019-01-08 17:04:53
Title: Siteconfig Title 1
Tagline: Siteconfig Tagline 1
CanViewType: Anyone
CanEditType: OnlyTheseUsers
CanCreateTopLevelType: OnlyTheseUsers
我在secondary_menu_fixture.yml文件中为请求设置了页面种子和所需数据,如下所示
SilverStripe\Security\Member:
admin_user:
ID: 1
LastEdited: 2020-03-28 17:15:53
Created: 2019-01-08 17:04:53
FirstName: Default Admin
Email: admin
SilverStripe\Security\Group:
admin_group:
ID: 1
LastEdited: 2019-01-08 17:04:53
Created: 2019-01-08 17:04:53
Title: Administrators
Code: administrators
Locked: 0
SilverStripe\CMS\Model\SiteTree:
sitetree_page_one:
ID: 1
ClassName: Page
Title: Page Title 1
URLSegment: page-url-1
Page:
page_one:
ID: 1
Heading: Page Title 1
Title: Cision form content
URLSegment: page-url-1
SilverStripe\SiteConfig\SiteConfig:
siteconfig_one:
ID: 1
LastEdited: 2020-03-10 12:25:37
Created: 2019-01-08 17:04:53
Title: Siteconfig Title 1
Tagline: Siteconfig Tagline 1
CanViewType: Anyone
CanEditType: OnlyTheseUsers
CanCreateTopLevelType: OnlyTheseUsers
当我运行测试时,对该路径的post请求“/admin/settings/SecondaryMenuPages”总是返回404。我的代码有什么问题,如何修复?您可以尝试使用测试设置xdebug。我就是这样经常挖这种兔子洞的。URL在您的普通站点中有效吗?您是否刷新了运行测试的webuser和cli用户?我总是在我的项目中创建一个文件夹
silverstripe cache
,SS在其中为每个用户(webserver和cli)放入缓存,然后我可以删除缓存文件夹以模拟刷新。嗨,URL在我的正常站点中确实起作用。你能给我一些关于如何设置xdebug的指导吗?