ruby-on-rails - 规范;如何测试这个功能?

标签 ruby-on-rails unit-testing testing rspec

ImageManager.check_enable_time

def check_enable_time
   # get current time
   now_time = Time.now
   # UTC to JST convestion JST = UTC + 9 hours
   hour = now_time.in_time_zone("Asia/Tokyo").hour
   (hour != 23) ? true : false

结束

如果 JST 中的当前时间 != 23 则此函数返回 true,否则返回 false。

我想测试这个功能。

我尝试了什么:

 describe ImageManager do
  describe "Test check_enable_time() function" do
    context "When current time in JST != 23" do
      it 'should return true' do
        image_manager = ImageManager.new
        result = image_manager.check_enable_time
        result.should eql(true)
      end
    end
  end
end

如何使 now_time.in_time_zone("Asia/Tokyo").hour 返回 23 而不是 23?

请帮助我是 rails 和 rspec 的新手。

最佳答案

避免安装另一个 gem 的解决方案是重写您现有的方法,这样它就不会显式依赖 Time.now:

def check_enable_time(now_time = Time.now)
  # UTC to JST convestion JST = UTC + 9 hours
  hour = now_time.in_time_zone("Asia/Tokyo").hour
  (hour != 23) ? true : false
end

然后您可以通过传递适当的时间来测试它:

it 'should return true' do
  image_manager = ImageManager.new
  time = Time.local(2008, 9, 1, 12, 0, 0)
  result = image_manager.check_enable_time(time)

  result.should eql(true)
end 

关于ruby-on-rails - 规范;如何测试这个功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42339268/

相关文章:

c# - VS2015 Enterprise 上下文菜单中没有 'run IntelliTest' 选项

java - 如何从 GUI 按钮启动 JUnit @Suite?

testing - go中函数的正确测试方法

testing - "ordinary people"的工具可以运行网络测试吗?

ruby-on-rails - 如何禁用 HTTP 严格传输安全?

ruby-on-rails - Rails - 如何让我的远程表单使用 JS 进行响应?

ruby-on-rails - 选择标签,指定选定的选项(或将数组元素移动到索引 0)

unit-testing - assertHeader 失败

php - 无法进行单元测试 : $_SESSION empties before each test is ran

sql - 检查基于 'ancestry' 的 SQL 表中的继承属性