gpt4 book ai didi

ruby - 使用 cucumber/aruba/timecop : How to inject the context 测试命令行应用程序

转载 作者:数据小太阳 更新时间:2023-10-29 07:08:17 24 4
gpt4 key购买 nike

以下场景几乎概括了我的问题:

Scenario: problems with subprocesses
Given the date is 01/01/2012 10:31
When I run `ruby -e "puts Time.now"`
Then the output should contain "10:31"

它归结为 当我运行 ruby​​ -e "puts Time.now" 时启动一个子进程,从而使我所有的 Timecop.freeze stub 无效,因为他们只在主要过程中工作。我需要以某种方式将当前上下文“注入(inject)”到运行的命令中,但我似乎无法想出任何东西。我在这里尝试不可能的事情吗?


步骤:

require 'timecop'
Given /^the date is (\d+)\/(\d+)\/(\d+) (\d+):(\d+)$/ do |month, day, year, hour, minute|
Timecop.freeze(Time.local(year.to_i, month.to_i, day.to_i, hour.to_i , minute.to_i, 0))
end

最佳答案

我在这里看到 2 个选项。

  1. 在被测系统中创建一个 Hook ,您可以使用它来注入(inject)所需的上下文,在此示例中,您可以将“当前时间”参数添加到您正在测试的命令行应用程序。或者在应用程序配置文件或数据库中指定固定时间,有很多选项。这假定您拥有正在测试的应用程序并且可以进行此类更改。这只需要一个非常小的变化,例如如果指定了 'current time' 参数,则使用 Timecop 卡住当时的时间。

  2. 找到一些方法将被测系统引入 Cucumber 进程。在您的示例中,您可以instance_eval "puts Time.now",而不是 ruby -e "puts Time.now"。更现实地说,您可以要求 应用程序,如果命令行运行器只是一些实际执行工作的类的简单包装,那么您可以直接调用它们。或者,您可以填充任何预期的 ARGV 参数,模拟 puts 方法,然后只是 require 文件,这应该会给您一个接近运行它的体验进程外,但您将能够有效地使用 Timecop。

关于ruby - 使用 cucumber/aruba/timecop : How to inject the context 测试命令行应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9503579/

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