You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony 4:JWT与Behat测试数据库配置遇阻求助

问题描述

我目前正在使用API Platform 2.1搭配Symfony 4框架,采用LexikJWTAuthenticationBundle做身份验证,同时想用Behat开展测试工作,但始终没法完成正确的配置。以下是我当前的Behat Feature配置内容:

Feature: Books feature
  @createSchema @dropSchema
  Scenario: Adding a new book
    When I add "Content-Type" header equal to "application/json"
    And I add "Accept" header equal to "application/json"
    And I send a "POST" request to "/api/books" with body:
    """
    {
      "title": "King",
      "author": "T. M. Frazier"
    }
    """
常见排查与配置修正建议

我之前也踩过类似的配置坑,给你几个关键的检查点,应该能帮你解决问题:

  • 缺失JWT身份验证头:你的测试场景里完全没加JWT授权头,API Platform的受保护端点肯定会拒绝请求。要么在场景里手动添加And I add "Authorization" header equal to "Bearer <你的测试用JWT令牌>",要么在Behat的自定义上下文里写个步骤自动获取并注入令牌(比如调用登录接口拿token)。
  • Behat Symfony扩展配置:确保你已经装了behat/symfony-extension,并且在config/behat.yaml里正确配置了内核和上下文,让Behat能访问Symfony容器和API客户端。示例配置如下:
    default:
      suites:
        api_suite:
          contexts:
            - App\Tests\Behat\ApiContext
            - Behat\Symfony2Extension\Context\KernelContext
      extensions:
        Behat\Symfony2Extension:
          kernel:
            class: App\Kernel
            env: test
            debug: true
    
  • API Platform测试环境配置:去config/packages/test/api_platform.yaml里确认测试模式的配置,比如关闭CSRF保护,或者针对测试环境调整JWT的密钥路径(确保测试用的密钥对存在)。
  • 数据库标签的上下文支持:你的Feature用了@createSchema @dropSchema标签,得确保Behat有对应的上下文处理这些标签,比如集成Doctrine的测试数据库工具,每次测试前重建数据库。

如果能提供具体的错误信息(比如请求返回的401/403状态码、Symfony日志里的报错内容),可以更精准地定位问题哦!

内容的提问来源于stack exchange,提问作者xfscrypt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:58:14