如何使用 projectile-find-test-file

7
我正在使用Emacs和projectile,并尝试设置测试文件的路径,以便我可以使用projectile-toggle-between-implementation-and-test
我调用M-xprojectile-find-test-file,但是Helm缓冲区是空的。无论我在pattern字段中放什么,都没有文件显示在Helm缓冲区中可供选择,而且输入相对于项目根目录的测试文件路径会导致在项目根目录打开Dired缓冲区。
请指导如何使用projectile-find-test-file
2个回答

7

projectile是一个工具,它能通过给源文件添加前缀/后缀来猜测测试文件的名称。例如,如果您有一个hello.rb文件,那么它会尝试在您的项目中查找名为hello_test.rb的文件。

它默认具有从项目类型到测试后缀/前缀的映射规则。以下是实际代码:

(defun projectile-test-suffix (project-type)
  "Find default test files suffix based on PROJECT-TYPE."
  (cond
   ((member project-type '(rails-rspec ruby-rspec)) "_spec")
   ((member project-type '(rails-test ruby-test lein-test go)) "_test")
   ((member project-type '(scons)) "test")
   ((member project-type '(maven symfony)) "Test")
   ((member project-type '(gradle grails)) "Spec")))

如果您在projectile-find-test-file中没有看到任何内容,那么很可能是它无法通过添加后缀/前缀找到与您的源文件相关的任何内容。
您可以通过projectile-test-suffix-function进行自定义。默认情况下,该变量指向上述函数,但您可以使用自己的规则覆盖它。

对于未来阅读此内容的人,自原始发布以来的这些年里,指定弹道数据结构保存项目类型信息的代码似乎已经发生了变化。例如,rails-rspec 的数据存储为属性列表,使用 projectile-register-project-type 调用,然后通过 projectile-test-suffix 中的 projectile-project-type-attribute 调用获取后缀信息。以防万一,如果您像我一样在寻找上述代码,请注意。 - dpritch
除了@Yiman的回答之外,我还发现https://www.philnewton.net/blog/exploring-emacs-projectile/很有帮助。 - dpritch

4

这并不是对您问题的很好回答,但是在我得到提示之前,projectile-find-test-file 就已经一直停滞了。我没有倾向去弄清楚那里发生了什么,所以我只是创建了:

(defun my-test-prefix (project-type) "test_")

并定制了projectile-test-function-prefix,使其指向该位置。这让我成功使用projectile-toggle-between-implementation-and-test,这就是我所需要的。


2
自从这篇文章最初发布以来,似乎指定自定义测试前缀函数的弹丸变量名称已更名为 projectile-test-prefix-function - dpritch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接