使用 Codeception 测试 GraphQL 请求时,布尔值 TRUE 转换为字符串“1”

Boolean TRUE converted to string "1" when testing GraphQL request with Codeception

我有一个安装了 WPGraphQL 插件的 Wordpress 网站,并且 运行 使用 Codeception 进行了一些测试以测试 GraphQL 查询。对于更多上下文,我正在使用 Codeception 的 REST 模块并在测试中使用 wp-browser.

加载 Wordpress

以下注册用户的测试失败:

class RegisterCest { 

   public function seeCanRegister( ApiTester $I ) {

      $I->send( "POST", "https://example.com/graphql", [
         "query" => '
            mutation registerUser( $input: RegisterUserInput! ) {
               registerUser( input: $input ) {
                  user {
                     username
                     email
                     addressMain
                     addressSec
                     adminArea
                     country
                     city
                     firstName
                     lastName
                     postalCode
                  }
               }
            }         
         ',
         "variables" => [
            "input" => [
               "clientMutationId" => "registerUser",
               "firstName" => "John",
               "lastName" => "Smith",
               "username" => "user@example.com",
               "email" => "user@example.com",
               "password" => "example",
               "addressMain" => "Fake Street",
               "addressSec" => "Apt #1",
               "adminArea" => "New York",
               "country" => "US",
               "city" => "New York",
               "postalCode" => 00000,
               "planSlug" => null,
               "subscribeToNewsletter" => true
            ]
         ]
      ]);

      $I->seeResponseCodeIs( 200 );
      $I->dontSeeResponseJsonMatchesJsonPath( "$.errors" );   

   }

}

测试失败,因为我在响应中收到以下错误:

Expected type Boolean at value.subscribeToNewsletter; Boolean cannot represent a non boolean value: 1"

基本上,似乎发生的事情是设置为 subscribeToNewsletter 的值的布尔值 true 在执行查询之前被转换为字符串 "1",这导致查询无效,因为在 GraphQL 架构中指定 subscribeToNewsletter 应为布尔值。

我在应用程序中 运行 查询时没有收到此错误;它只在本次测试中出现。谁能想出原因?

正如 Arvin Jason Cabrera 在评论中所建议的那样,问题是我没有将 Content-Type 设置为 application/json。就我而言,我只需添加以下行

$I->haveHttpHeader('Content-Type', 'application/json');

在发送请求之前。