gpt4 book ai didi

ruby-on-rails - 用 cucumber 测试场景的正确方法(rails 2.3.8)

转载 作者:行者123 更新时间:2023-12-04 06:39:31 24 4
gpt4 key购买 nike

因此,我开始构建一个新应用程序,这是我从 .net 迁移到 Rails 后的第一个大型应用程序。

我真的很想对整个应用程序进行 BDD,所以我已经设置好了 cucumber 并准备好了。

我已经为简单的东西(删除、添加、更新)等编写了更多的测试,但现在我被困在试图弄清楚如何测试这个场景。

我有这些模型
用户、帐户、计划
每个帐户都有一个计划,这些计划每月收费(在创建帐户的同一天)。

我想测试选择一个计划,创建一个帐户,检查计费过程(甚至模拟,此时没有 PayPal)。

我很感激这方面的帮助,只是为了强调,我不是在寻找完整的代码,只是对您将如何(在概念上)进行测试的解释。

此外,计划是可升级和可降级的,所以我也想对此进行测试。

在此先感谢您的帮助

最佳答案

我喜欢练习由外到内的开发,我们从编写验收测试开始,然后进入单元测试来处理领域逻辑。我们以创建账户为例。

首先为所需功能编写 Cucumber 故事。例如:

Feature: Create an account
In order to use the application
As a user
I want to create an account

Scenario: Create an account from home page
Given I am on the home page
When I follow "Sign up"
And I fill in "Username" with "bob"
And I fill in "Password" with "test123"
And I press "Create"
Then I should see "You have successfully signed up! You may now sign in."

当我们使用 cucumber features 运行我们的 Cucumber 功能时命令,场景中的第一步将失败,因为主页尚不存在。为了创建它,我们可以将其视为一个单独的功能。因此,我们可能会编写另一个 Cucumber 功能,例如:
  Scenario: Visitor visits the home page
When I go to the home page
Then I should see "Welcome to the Website of Awesomeness"

运行这个功能,我们会发现 Rails 应用中没有定义根路由。一旦我们解决了这个问题,我们将需要一个 Controller 、 View 和 View 中的文本。到目前为止,我们只编写了 Cucumber 测试。

一旦所有这些功能都通过了,我们意识到应该需要一个用户名。我们可以编写一个 Cucumber 步骤来测试这个案例:
  Scenario: Username must be filled out
Given I am on the home page
When I follow "Sign up"
And I fill in "Password" with "test123"
And I press "Create"
Then I should see "Username cannot be blank."

为了实现这一点,我们必须向我们的模型添加一个验证,以验证是否包含用户名。 现在我们将进入单元测试,因为我们正在修改域逻辑。 作为一般规则,当您修改模型时,您应该进入 RSpec 或 Test::Unit 并直接测试该修改。例如,使用 RSpec,我们将添加一个规范以确保用户名必须存在(并且是唯一的等)。一旦这个测试通过,我们的场景也应该开始通过。

这是冗长的,但它应该可以帮助您以非常真实的方式开始练习 BDD。有关更多信息,请参阅 RSpec 书籍(其中包含有关使用 Cucumber 和 RSpec 的外在实践的大量信息): http://www.pragprog.com/titles/achbd/the-rspec-book

关于ruby-on-rails - 用 cucumber 测试场景的正确方法(rails 2.3.8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4437471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com