【问题标题】:Laravel unit testing calling a method that calls that databaseLaravel 单元测试调用调用该数据库的方法
【发布时间】:2019-03-23 20:10:18
【问题描述】:

我一直在尝试设置一个单元测试来调用调用数据库的方法。我查看了嘲笑和伪造者,对该怎么做感到困惑。

在我的测试中我调用

Logic::lookForClassificationException($exception_array, $content);

在我的方法中调用了我的 ClassificationException 模型

$exceptions = ClassificationException::select('exception')->get(); 

我对如何为此设置模拟感到困惑。 ClassificationException 是一个具有 id、exception、previous_word 和 after_word 的表。

如何模拟或伪造设置?

【问题讨论】:

    标签: laravel unit-testing mocking faker


    【解决方案1】:

    使用 DB 进行测试的一种方法是设置内存中的 sqlite 数据库以进行如下测试:

    use Illuminate\Database\Capsule\Manager as DB;
    
    protected function setUpDatabase()
    {
        $database = new DB;
    
        $database->addConnection(['driver' => 'sqlite', 'database' => ':memory:']);
        $database->bootEloquent();
        $database->setAsGlobal();
    }
    

    然后,在测试类的setUp 方法中调用此函数。

    这只是众多可能方法中的一种,可能不适合您的需求。另一种方法是设置一个单独的数据库用于测试和use a separate .env for tests

    根据我的经验,当您尝试模拟 Eloquent 模型时,测试会失败

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-21
      • 1970-01-01
      相关资源
      最近更新 更多