CMS路由(设置)的SilverStripe功能测试始终返回404以进行POST请求

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

我正在做一个SilverStripe项目。我正在为我的应用程序编写功能测试。我正在为CMS中的路径编写功能测试。在我的例子中,路径是/admin/settings/SecondaryMenuPages。这是CMS内的路径,因此用户需要登录

这是我的测试课

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的指导吗?