Minitest - 测试不运行 - 没有Rails

时间:2015-11-21 13:15:20

标签: ruby minitest

我刚开始一个小型项目来模仿嘉年华的售票亭,其中一条指导方针是测试用户是否可以输入门票数量。该程序在控制台中运行,我最终(希望)通过@ {Stefan在this question上的回答找出了如何实现此测试。

现在的问题是,当我运行测试文件时,minitest说:

  

0次运行,0次断言,0次失败,0次错误,0次跳过

当我尝试使用Encoding.Unicode按名称运行测试时,我得到相同的结果。我不确定这是不是因为我的代码仍然有问题,因为我是因为我错误地设置了minitest。我试图在SO上查找类似的问题,但大多数问题似乎涉及使用minitest和rails,我只是有一个普通的ruby项目。

这是我的测试文件:

ruby path/to/test/file.rb --name method-name

在与我的测试文件相同的文件夹中名为gem 'minitest', '>= 5.0.0' require 'minitest/spec' require 'minitest/autorun' require_relative 'carnival' class CarnivalTest < MiniTest::Test def sample assert_equal(1, 1) end def user_can_enter_number_of_tickets with_stdin do |user| user.puts "2" assert_equal(Carnival.new.get_value, "2") end end def with_stdin stdin = $stdin # global var to remember $stdin $stdin, write = IO.pipe # assign 'read end' of pipe to $stdin yield write # pass 'write end' to block ensure write.close # close pipe $stdin = stdin # restore $stdin end end 的文件中

carnival.rb

如果有人能帮助弄清楚测试没有运行的原因,我将不胜感激!

2 个答案:

答案 0 :(得分:6)

按照惯例,Minitest中的测试是以test_开头的公共实例方法,因此原始测试没有实际的测试方法。您需要更新测试类,以便带有断言的方法遵循以下约定:

class CarnivalTest < Minitest::Test
  def test_sample
    assert_equal(1, 1)
  end

  def test_user_can_enter_number_of_tickets
    with_stdin do |user|
      user.puts "2"
      assert_equal(Carnival.new.get_value, "2")
    end
  end

  # snip...
end

答案 1 :(得分:0)

是的,总是用test_启动所有测试,所以它知道你想要那个函数/方法

class CarnivalTest < MiniTest::Test
 def test_sample
assert_equal(1, 1)
end

 def test_user_can_enter_number_of_tickets
with_stdin do |user|
  user.puts "2"
  assert_equal(Carnival.new.get_value, "2")
  end
end

这应该对你有用