在我的手动Sinatra应用程序中间歇性地破坏测试。与文件处理相关吗?

时间:2017-01-29 17:45:10

标签: ruby debugging sinatra

总结:添加逻辑以保存用户帐户数据后,我的代码似乎工作正常,有时我的所有(很多)测试都通过。但有时它们似乎随机失败,测试期间没有删除/tmp个测试文件。

在我手动滚动的Ruby / Sinatra "to do list" program中,我添加了用户帐户,现在可以将数据保存到用户文件(.yml格式)以及tmp文件,供未登录的人使用。耶!

据我所知,代码运行正常。所有测试都通过......但有时只是通过。有时,与我的新文件处理方法相关的测试失败。这是一个样本:

# Running:

....EF..........................

Finished in 3.930466s, 8.1415 runs/s, 53.1744 assertions/s.

  1) Error:
ToDoTest#test_post_newtask:
Errno::EACCES: Permission denied @ unlink_internal - tmp/1.yml
    C:/Users/user/Dropbox/_Programming/Ruby/learning_projects/todo/test/test_todo.rb:404:in `delete'
    C:/Users/user/Dropbox/_Programming/Ruby/learning_projects/todo/test/test_todo.rb:404:in `block (2 levels) in teardown'
    C:/Users/user/Dropbox/_Programming/Ruby/learning_projects/todo/test/test_todo.rb:404:in `each'
    C:/Users/user/Dropbox/_Programming/Ruby/learning_projects/todo/test/test_todo.rb:404:in `block in teardown'


  2) Failure:
ToDoTest#test_get_deleted [C:/Users/user/Dropbox/_Programming/Ruby/learning_projects/todo/test/test_todo.rb:167]:
Expected false to be truthy.

32 runs, 209 assertions, 1 failures, 1 errors, 0 skips
rake aborted!
Command failed with status (1): [ruby -I"lib" -I"C:/Ruby23/lib/ruby/gems/2.3.0/gems/rake-10.4.2/lib" "C:/Ruby23/lib/ruby/gems/2.3.0/gems/rake-10.4.2/lib/rake/rake_test_loader.rb" "test/test_task.rb" "test/test_task_store.rb" "test/test_todo.rb" "test/test_todo_helpers.rb" "test/test_users.rb" ]

Tasks: TOP => default => test
(See full trace by running task with --trace)

这只是示例,因为有时会有更多测试失败或出错。它奇怪随机。我注意到我的测试导致很多/tmp文件被快速制作和删除,有时无法删除某些文件,因此有些文件会被遗忘。如果我在/tmp中有一些未删除的文件时重新进行测试,则会出现更多(再次,随机)错误。

我看到的一个常见错误是我在添加新文件处理命令之前从未见过的错误:Errno::EACCES: Permission denied @ unlink_internal。我在SO上看了这个,但似乎只有(无关紧要的)Rails的东西。这是在Windows上运行的Sinatra程序。那么我可以在我的Ubuntu VM中复制测试吗?是的我可以。恰恰相同的错误模式。

无论如何,我怀疑系统命令在执行继续之前没有完成。但显然不是。我试着把'睡觉2"在我的所有系统命令之后,我仍然/tmp中得到了一个随机失败的测试和残留。我也尝试过使用以前从未使用过的线程,比如:

delr = Thread.new do
  File.delete(@store.path) # seems to help to add this here...
end
delr.join

但这并没有帮助。

另一件事......我在教自己,这可能不是它应该完成的方式,但......我所有的get方法前面都有一个检查我的session [:id]变量以查看用户是否已登录,并查看是否加载了正确的数据文件。我不知道这是否相关,但可能是。

关于问题可能是什么或如何解决问题的任何想法?

0 个答案:

没有答案