热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在laravel包中设置集成测试

如何解决《在laravel包中设置集成测试》经验,为你挑选了2个好方法。

目前正努力在我正在编写的包中设置集成测试.

对于集成测试,我需要访问Laravel环境,以便我可以访问诸如Artisan :: call('migrate')之类的东西并访问数据库.

目前我猜我需要进行任何测试扩展Laravel TestCase类,引导Laravel环境.虽然我不能训练如何将这个文件调用到我的包中.

其次,在工作台中开发包时,我需要使用Artisan :: call('migrate',' - bench ="vendor/package"')或Artisan :: call('migrate',' - package ="vendor /包"')这令人困惑.



1> AndrewMcLaga..:

我们需要创建一个Laravel实例,以及PHPUnit可以访问的数据库,以针对实际数据集运行测试.不脆弱的嘲笑.首先,您应该单独开发包,原因有很多,其中一个工作台现在已在Laravel 5中弃用.

首先,我们需要dev-require将Laravel框架纳入我们的项目:

"require-dev": {
    "phpunit/phpunit": "~4.0",
    "phpspec/phpspec": "~2.1",
    "laracasts/testdummy": "~2.0",
    "laravel/laravel": "dev-develop"
},   

现在我们可以创建一个名为DbTestCase所有测试都将扩展的抽象类.在这个类中,我们将启动一个Laravel实例和一个内存 SQLite数据库以提高速度.

如果我们扩展原生Laravel测试类Illuminate\Foundation\Testing\TestCase,我们已经完成了一些工作.我们只需要创建一个返回实例的方法Illuminate\Foundation\Application.

/**
 * Boots the application.
 *
 * @return \Illuminate\Foundation\Application
 */
public function createApplication()
{
    $app = require __DIR__.'/../vendor/laravel/laravel/bootstrap/app.php';

    $app->register('Path\To\Your\PackageServiceProvider');

    $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();

    return $app;        
}

注意$app->register('Path\To\Your\PackageServiceProvider');这一点很重要.在此处包含您的包服务提供者路径,因此我们将其注册到我们的packages /vendor文件夹中的Laravel实例.

现在我们运行了一个Laravel应用程序,我们需要设置内存中的SQLite数据库.简单,Laravel TestCase有一个setUp()在测试之前运行的功能,让我们在那里做:

/**
 * Setup DB before each test.
 *
 * @return void  
 */
public function setUp()
{ 
    parent::setUp();

    $this->app['config']->set('database.default','sqlite'); 
    $this->app['config']->set('database.connections.sqlite.database', ':memory:');

    $this->migrate();
}

我不会给出太多解释,因为它非常易读.正如你在最后一行所看到的那样,我们也在调用$this->migrate(),每当我们运行测试时,显然会运行我们的迁移,为我们提供一个新的DB来测试.让我们看看它是如何工作的:

/**
 * run package database migrations
 *
 * @return void
 */
public function migrate()
{ 
    $fileSystem = new Filesystem;
    $classFinder = new ClassFinder;

    foreach($fileSystem->files(__DIR__ . "/../src/Migrations") as $file)
    {
        $fileSystem->requireOnce($file);
        $migratiOnClass= $classFinder->findClass($file);

        (new $migrationClass)->up();
    }
}

不要过多细节,基本上我们在这里做的是查看src/Migrations需要所有文件然后运行其迁移的包的文件夹.它粗糙,需要更多的安全检查(我将在未来这样做),但它的工作原理.

为什么不Artisan :: call('migrate')??

简单!在Laravel 5中,该命令php artisan migrate --package='vendor/package'已被弃用.现在,开发人员需要创建自己的命令,以生成迁移文件并将其移动到应用程序中的适当位置.这是一种更灵活的方法.



2> Propaganista..:

虽然这个问题已经得到了答案,但我强烈建议使用orchestra/testbench软件包.

在包的require-dev部分添加此包,composer.json并确保TestCase按照自述文件中的描述扩展此包中的任何测试类.

该软件包能够加载自定义服务提供程序,注册自定义别名等,同时启动完整的Laravel环境进行测试.


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • CMake跨平台开发实践
    本文介绍如何使用CMake支持不同平台的代码编译。通过一个简单的示例,我们将展示如何编写CMakeLists.txt以适应Linux和Windows平台,并实现跨平台的函数调用。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 本文探讨了在使用Azure Active Directory进行用户身份验证时,结合AddAuthentication和RequireAuthenticatedUser的必要性及其潜在冗余问题。 ... [详细]
  • 在项目部署后,Node.js 进程可能会遇到不可预见的错误并崩溃。为了及时通知开发人员进行问题排查,我们可以利用 nodemailer 插件来发送邮件提醒。本文将详细介绍如何配置和使用 nodemailer 实现这一功能。 ... [详细]
  • 中科院学位论文排版指南
    随着毕业季的到来,许多即将毕业的学生开始撰写学位论文。本文介绍了使用LaTeX排版学位论文的方法,特别是针对中国科学院大学研究生学位论文撰写规范指导意见的最新要求。LaTeX以其精确的控制和美观的排版效果成为许多学者的首选。 ... [详细]
author-avatar
青大柠的小号_247
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有