定制 miniaturebase/pest-plugin-graphql 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

miniaturebase/pest-plugin-graphql

Composer 安装命令:

composer require --dev miniaturebase/pest-plugin-graphql

包简介

Test your PHP GraphQL server in style, with Pest!

README 文档

README

Test your GraphQL API in style, with Pest!

Installation

Simply install through Composer!

composer require --dev miniaturebase/pest-plugin-graphql

What's Added?

  • Test your schema as code;
  • Assert PSR-7 GraphQL response data and errors;
  • Testing resolvers (Coming Soon!);

Expectations

  • schema(string|Schema $document)
  • isValidSdl()
  • toHaveDirective(string $directive)
  • toHaveEnum(string $enum)
  • toHaveInput(string $input)
  • toHaveInterface(string $interface)
  • toHaveScalar(string $scalar)
  • toHaveType(string $type)
  • toHaveUnion(string $union)
  • toBeGraphQlResponse()
  • toHavePath(string $path, $value = null)
  • toHaveData(array $data)
  • toHaveErrors(array $errors)

And more on the way!

schema(string|Schema $document)

Create a new expectation with a GraphQL\Type\Schema instance as the underlying value.

test('my schema')->schema();
it('is my schema')->schema();
Pest\GraphQl\schema();

You can also provide an alternative schema path or document contents, like so.

it('uses any schema you want')->schema(sprintf('%s/../app/schema.graphql', __DIR__));
test('inline content')->schema(<<<'GRAPHQL'
type Query {
    foo: Int
    bar: Int
}
GRAPHQL);
it('even uses your instance')->schema(AcmeSchemaBuilder::build());

isValidSdl()

Assert that the schema is valid and written to the GraphQL specification.

it('validates your schema')->schema()->isValidSdl();

toHaveDirective(string $directive)

Assert that the given directive definition exists with the schema document.

it('has a directive')->schema()->toHaveDirective('auth')
it('will also use base classnames')->schema()->toHaveDirective(Auth::class);

toHaveEnum(string $enum)

Assert that the given enum definition exists with the schema document.

it('has an enum')->schema()->toHaveEnum('Status')
it('will also use base classnames')->schema()->toHaveEnum(Status::class);

toHaveInput(string $input)

Assert that the given input definition exists with the schema document.

it('has a input')->schema()->toHaveInput('Message')
it('will also use base classnames')->schema()->toHaveInput(Message::class);

toHaveInterface(string $interface)

Assert that the given interface definition exists with the schema document.

it('has a interface')->schema()->toHaveInterface('Notification')
it('will also use base classnames')->schema()->toHaveInterface(Notification::class);

toHaveScalar(string $scalar)

Assert that the given scalar definition exists with the schema document.

it('has a scalar')->schema()->toHaveScalar('Date')
it('will also use base classnames')->schema()->toHaveScalar(Date::class);

toHaveType(string $type)

Assert that the given (object) type has been defined within the schema document.

it('has mutations')->schema()->toHaveType('Mutation');
test('user defined types too')->schema()->toHaveType('User');
it('will also use your base classnames')->schema()->toHaveType(User::class);

toHaveUnion(string $union)

Assert that the given union definition exists with the schema document.

it('has a union')->schema()->toHaveUnion('Character')
it('will also use your base classnames')->schema()->toHaveUnion(Character::class);

toBeGraphQlResponse()

Assert that an underlying (PSR-7) response value is a compliant with the GraphQL specification.

test('response validity')
    ->expect($response) // a Psr\Http\Message\ResponseInterface instance
    ->toBeGraphQlResponse();

toHavePath(string $path, $value = null)

Assert that the underlying GraphQL response contains data at the given path. Optionally provide a value to be checked as well!

it('reads paths')
    ->expect($response) // a Psr\Http\Message\ResponseInterface instance
    ->toHavePath('foo')
    ->toHavePath('foo', 1)
    ->not()
    ->toHavePath('foo.bar')
    ->not()
    ->toHavePath('foo', 0);

toHaveData(array $data)

Assert that the underlying response GraphQL data is canonically equal to the expected data.

it('contains response data')
    ->expect($response) // a Psr\Http\Message\ResponseInterface instance
    ->toHaveData([
        'foo' => 1,
    ]);

toHaveErrors(array $errors)

Assert that the underlying response GraphQL errors are canonically equal to the exepected set of errors.

it('has errors')
    ->expect($response) // a Psr\Http\Message\ResponseInterface instance
    ->toHaveErrors([
        [
            'message'   => 'Oops, I did it again',
            'locations' => [['line' => 1, 'column' => 5]],
            'path'      => ['foo'],
        ],
    ]);

This repository was based off of the Pest Plugin Template.

Pest was created by Nuno Maduro under the Sponsorware license. It got open-sourced and is now licensed under the MIT license.

miniaturebase/pest-plugin-graphql 适用场景与选型建议

miniaturebase/pest-plugin-graphql 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 9 次下载、GitHub Stars 达 15, 最近一次更新时间为 2021 年 08 月 07 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「framework」 「php」 「testing」 「plugin」 「test」 「unit」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 miniaturebase/pest-plugin-graphql 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 miniaturebase/pest-plugin-graphql 我们能提供哪些服务?
定制开发 / 二次开发

基于 miniaturebase/pest-plugin-graphql 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 9
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 15
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 15
  • Watchers: 2
  • Forks: 2
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2021-08-07