【问题标题】:Laravel Testing - the name is already in useLaravel 测试 - 该名称已被使用
【发布时间】:2021-02-08 10:57:46
【问题描述】:

我在使用 phpunit 时遇到问题,我不知道为什么我在文件正常的情况下会出现这种错误, 我的理论是,当测试运行时,它会重新包含名称文件,而不是检查文件是否已经被导入,那么它不应该重新发布。

我尝试在 CreateApplications 上执行 require_once 但它会导致错误,

由于错误,我无法在一个类上测试所有测试用例

Cannot declare class <class omitted>, because the name is already in use in <file omitted>

<?php

namespace Tests;

use Illuminate\Contracts\Console\Kernel;

trait CreatesApplication
{
    /**
     * Creates the application.
     *
     * @return \Illuminate\Foundation\Application
     */
    public function createApplication()
    {
        $app = require_once(__DIR__.'/../bootstrap/app.php');

        $app->make(Kernel::class)->bootstrap();

        return $app;
    }
}

我的问题是,如何修复此错误或如何不重新导入课程?如何预防?

到目前为止,我在 PHPUnit 上使用 --filter 选项来调用测试类上的特定方法

【问题讨论】:

    标签: phpunit laravel-5.6


    【解决方案1】:

    更新

    有一个自定义包,它使用include,这会导致错误, 就我而言,它位于自定义包服务提供者的引导方法中

    <?php
    
    namespace CustomPackage;
    
    use Illuminate\Support\ServiceProvider;
    
    class CustomPackageProvider extends ServiceProvider{
        /**
         * Bootstrap any application services.
         *
         * @return void
         */
        public function boot(){
            ...
            include(__DIR__.'/Nem/NemPhp.php');
        }
    
        /**
         * Register any application services.
         *
         * @return void
         */
        public function register(){
    
        }
    }
    
    

    所以将include 更改为require_once 解决问题 报告中的错误不太清楚,这就是为什么我很难质疑理论是如何发生的,因为一个错误:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 2017-08-12
      • 2018-02-27
      • 1970-01-01
      相关资源
      最近更新 更多