在复制测试文件设置行时,不要忘记重命名测试类。这就是

时间:2017-01-01 03:48:41

标签: ruby unit-testing minitest

如何在一个Ruby Minitest文件中设置在不同的Minitest文件中导致六个错误?

我甚至不知道我怎么看这个。希望你能帮忙。

我正在编写单元测试(在Minitest for Ruby中,this "to do list" learning project),我的测试正在通过。然后,我开始在新文件test_todo_helpers.rb中编写方法的测试,并且第一次运行文件的设置方法时,我得到了六个错误。事实证明,错误是完全不同的测试脚本test_task.rb中的错误。当我只删除第一个测试文件时,我的所有测试都通过了!请注意,我根本没有触摸源文件。

这是一个示例错误消息,六个错误之一(所有这些错误都是" nil&#34的未定义方法;)。

  1) Error:
TestTask#test_check_description:
NoMethodError: undefined method `check_description' for nil:NilClass
    C:/Users/user/Dropbox/_Programming/Ruby/learning_projects/todo/test/test_task.rb:41:in `test_check_description'

test_todo_helpers.rb中,我能够将问题缩小到一行,这里是:@store = TaskStore.new('tasks.yml')。在一个测试文件中注释掉该行,并在另一个测试文件中的所有错误神奇地消失!

我完全喜欢WTF?为什么我将yaml存储加载到一个测试文件中的实例变量中导致另一个测试文件(通常不是nil)中的对象突然变为nil

我在想,也许我需要做一些teardown?我从来没有这样做,因为我从未理解为什么它是必要的。一个文件中的测试会影响另一个文件中的测试吗? (我是初学者。)

这让我觉得这是一个潜在的学习机会,所以我在这里。知道发生了什么事吗?

1 个答案:

答案 0 :(得分:1)

test_task.rbtest_todo_helpers.rb都提供了TestTask的定义。这意味着两个文件测试被minitest视为一组测试。如果您在class TestTask < Minitest::Test中将class TestTodoHelpers < Minitest::Test更改为test_todo_helpers.rb,则所有测试都会通过。