imanghafoori/eloquent-mockery

允许您以独立的方式设计您的测试。

v1.0.40 2022-11-15 14:02 UTC

README

无需仓库模式即可模拟 eloquent 查询。

Required Laravel Version Required PHP Version tests Imports Software License

为什么创建这个包?

  • 通过移除与真实数据库的交互,它解决了“慢测试”的问题。
  • 简化了编写和运行测试的过程,因为您的测试将是“数据库独立”的。

安装

您可以通过 Composer 安装 此包

composer require imanghafoori/eloquent-mockery --dev dev-main

用法

首先,您需要在您的 config/database.php 中定义一个新的连接,并将驱动设置为 'arrayDB'。

<?php

return [
  
   ...
  
  'connections' => [
     'my_test_connection' => [
         'driver' => 'arrayDB',
         'database' => '',
     ],
     
     ...
  ],
  ...
]

然后您可以

public function test_basic()
{
    config()->set('database.default', 'my_test_connection');

    # ::Arrange:: (Setup Sample Data)
    FakeDB::addRow('users', ['id' => 1, 'username' => 'faky', 'password' => '...']);
    FakeDB::addRow('users', ['id' => 1, 'username' => 'maky', 'password' => '...']);

    # ::Act:: (This query resides in your controller)
    $user = User::where('username', 'faky')->first();   # <=== This does NOT connect to a real DB.

    # ::Assert::
    $this->assert($user->id === 1);
    $this->assert($user->username === 'faky');
}

模拟一个 create 查询

public function test_basic()
{
    # In setUp:
    FakeDB::mockEloquentBuilder();

    # ::Act::
    $this->post('/create-url', ['some' => 'data' ])

    # ::Assert::
    $user = User::first();
    $this->assertEquals('iman', $user->username);

    # In tearDown
    FakeDB::dontMockEloquentBuilder();
}
  • 更多示例,请查看 tests 目录。

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件

🙋 贡献

如果您发现任何问题或有更好的方法来完成某事,请随时提交问题或拉取请求。

❗ 安全

如果您发现任何安全相关的问题,请通过电子邮件 imanghafoori1@gmail.com 而不是使用问题跟踪器。