使用 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');
在发送请求之前。
我有一个安装了 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');
在发送请求之前。