2017-01-01 18 views
1

如何在一个Ruby Minitest文件中设置在不同Minitest文件中导致六个错误?复制测试文件设置行时,不要忘记重命名测试类。这是为什么

我甚至不知道如何看这一个。希望你能帮助。

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

下面是一个示例错误消息,六个错误之一(所有这些都是“未定义的方法为零”)。

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

也许你不能创建两个同名的商店?我会尝试在开始下一个测试之前删除商店及其yaml文件。 – spickermann

回答

1

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

+0

呃。你是完全正确的。我从'test_task.rb'复制了测试文件的前几行,当我按照你的说法重命名测试类时,所有测试都通过了。谢谢!新年快乐! – globewalldesk

相关问题