如何在一个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
?我从来没有这样做,因为我从未理解为什么它是必要的。一个文件中的测试会影响另一个文件中的测试吗? (我是初学者。)
这让我觉得这是一个潜在的学习机会,所以我在这里。知道发生了什么事吗?
答案 0 :(得分:1)
test_task.rb
和test_todo_helpers.rb
都提供了TestTask
的定义。这意味着两个文件测试被minitest视为一组测试。如果您在class TestTask < Minitest::Test
中将class TestTodoHelpers < Minitest::Test
更改为test_todo_helpers.rb
,则所有测试都会通过。