我正在尝试跟踪测试套件中的内容,并希望能够插入一些回调,并知道我的哪些测试间接触发了对象的创建。我愿意只运行测试套件,每次触发创建回调时,显示哪个测试将我带到了那里。
到目前为止,我在模型上添加了after_create
回调,并过滤了caller
堆栈以保留有意义的部分:
calling_tests =
caller
.select { |cl| cl.include? '/test/' }
.reject { |cl| cl.include? 'test_utils' }
.map { |cl| cl.delete_prefix(PROJECT_PATH) }
哪个让我得到这种输出:
["/test/controllers/books_controller_test.rb:426:in `block (3 levels) in <class:BooksControllerTest>'",
"/test/controllers/books_controller_test.rb:425:in `block (2 levels) in <class:BooksControllerTest>'"]
从那里,是否有任何方法可以发现此位置实际上是it "creates a new book"
测试,甚至可以获取其所有describe
祖先?当我查看结果时,对我来说甚至更加清晰。