让我们从 Laravel、BDD 和你开始

2023年 9月 1日 60.4k 0

当我们这样做时,我们期望发生什么? 块引用>

除非我们重构现有代码,否则除非我们遇到失败的红色步骤,否则我们不允许编写任何代码。

有时,有必要迭代地解决我们正在处理的故事或功能(我交替使用的两个词)的一小部分。这通常意味着使用 PhpSpec 编写规范。有时,在整个故事(在接受级别上)通过之前,需要在集成或单元级别上进行多次迭代。这一切听起来很复杂,但事实并非如此。我坚信边做边学,所以我认为一旦我们开始编写一些实际的代码,一切都会变得更有意义。

我们将在四个不同的层面上编写故事和规范:

1. 验收

大多数时候,我们的功能套件将充当我们的接受层。我们在功能套件中描述功能的方式将与我们编写接受故事的方式(使用自动化浏览器框架)非常相似,因此会产生大量重复。

只要故事从客户的角度描述了行为,它们就可以作为接受故事。我们将使用 Symfony DomCrawler 来测试应用程序的输出。在本系列的后面,我们可能会发现我们需要通过也可以运行 JavaScript 的实际浏览器进行测试。通过浏览器进行测试增加了一些新的问题,因为我们需要确保在套件运行时加载小时测试环境。

2. 功能性

在我们的功能套件中,我们将可以访问Laravel应用程序,这非常方便。首先,它可以轻松区分环境。其次,不通过浏览器使我们的测试套件更快。每当我们想要实现一个新功能时,我们都会使用 Behat 在我们的功能套件中编写一个故事。

3. 集成

我们的集成套件将测试应用程序核心部分的行为,这些部分不一定需要访问 Laravel。集成套件通常是 Behat 故事和 PhpSpec 规范的混合体。

4.单位

我们的单元测试将用 PhpSpec 编写,并将测试应用程序核心的独立小单元。我们的实体、值对象等都会有规格。

案例

在本系列中,从下一篇文章开始,我们将构建一个跟踪时间的系统。我们将首先通过编写 Behat 特征来描述外部行为。我们的应用程序的内部行为将使用 PhpSpec 进行描述。

这两个工具一起将帮助我们对正在构建的应用程序的质量感到满意。我们将主要在三个层面上编写功能和规格:

  • 功能性
  • 集成
  • 单位
  • 在我们的功能套件中,我们将以无头模式抓取应用程序的 HTTP 响应,这意味着我们不会通过浏览器。这将使与 Laravel 交互变得更容易,并使我们的功能套件也充当我们的接受层。

    稍后,如果我们最终拥有更复杂的 UI 并且可能还需要测试一些 JavaScript,我们可能会添加专用的验收套件。该系列仍在进行中,因此请随时在评论部分提出您的建议。

    我们的设置

    请注意,在本教程中,我假设您全新安装并运行了 Laravel (4.2)。最好您也使用 Laravel Homestead,这就是我在编写此代码时使用的。

    在开始任何实际工作之前,让我们确保 Behat 和 PhpSpec 已启动并运行。首先,每当我开始一个新的 Laravel 项目时,我喜欢做一些清理工作并删除我不需要的东西:

    git rm -r app/tests/ phpunit.xml CONTRIBUTING.md

    登录后复制

    如果您删除这些文件,请务必相应地更新您的 composer.json 文件:

    "autoload": {
    "classmap": [
    "app/commands",
    "app/controllers",
    "app/models",
    "app/database/migrations",
    "app/database/seeds"
    ]
    },

    登录后复制

    当然:

    $ composer dump-autoload

    登录后复制

    现在我们准备好引入我们需要的 BDD 工具了。只需将 require-dev 部分添加到您的 composer.json

    "require": {
    "laravel/framework": "4.2.*"
    },
    "require-dev": {
    "behat/behat": "~3.0",
    "phpspec/phpspec": "~2.0",
    "phpunit/phpunit": "~4.1"
    },

    登录后复制

    “我们为什么要引入 PHPUnit?”你可能在想?在本系列中,我们不会编写优秀的 PHPUnit 测试用例,但断言与 Behat 一起是一个方便的工具。我们将在本文后面编写第一个功能时看到这一点。

    请记住在修改 composer.json 后更新依赖项:

    $ composer update --dev

    登录后复制

    我们即将完成安装和设置。 PhpSpec 开箱即用:

    $ vendor/bin/phpspec run

    0 specs
    0 examples
    0ms

    登录后复制

    但是 Behat 需要使用 --init 选项快速运行才能设置所有内容:

    $ vendor/bin/behat --init

    +d features - place your *.feature files here
    +d features/bootstrap - place your context classes here
    +f features/bootstrap/FeatureContext.php - place your definitions, transformations and hooks here

    $ vendor/bin/behat

    No scenarios
    No steps
    0m0.14s (12.18Mb)

    登录后复制

    第一个命令创建了一个闪亮的新 FeatureContext 类,我们可以在其中编写功能所需的步骤定义:

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论