Ruby on rails 关注RSpec匿名控制器
我试图在RSpec中测试Rails控制器的问题(尽管我不确定这一事实是否与我的问题有关),所以我想我应该使用匿名控制器。以下是我的设置:Ruby on rails 关注RSpec匿名控制器,ruby-on-rails,ruby,rspec,guard,Ruby On Rails,Ruby,Rspec,Guard,我试图在RSpec中测试Rails控制器的问题(尽管我不确定这一事实是否与我的问题有关),所以我想我应该使用匿名控制器。以下是我的设置: describe MyConcern do controller do include MyConcern def edit puts "Checkpoint!" @value = concern_method render text: "test edit method called" end
describe MyConcern do
controller do
include MyConcern
def edit
puts "Checkpoint!"
@value = concern_method
render text: "test edit method called"
end
end
it "should call concern_method" do
get :edit, id: 1
assigns(:value).should eq "expected_value" # Set by concern_method
end
end
现在是奇怪的部分。我使用Guard进行测试。当Guard检测到spec文件的保存并运行此测试时,它通过并检查点代码>已打印。每一次,都是完全决定性的。我可以继续保存文件,它会不断传递。(如果有帮助,Guard会使用Spring并运行RSpec。)
但是当我使用RSpec命令运行测试时,它失败了。最奇怪的是,我本以为会发生失败,因为匿名控制器设置发生了一些奇怪的事情,它找不到路由,但是测试失败的是应该。当我以这种方式手动运行RSpec时,Checkpoint代码>从不打印,表示未调用匿名控制器操作。但因为我没有收到路由错误,某些控制器操作必须被调用,但我不知道是什么,因为我甚至没有任何其他匿名控制器具有可能冲突的编辑功能。我试过重新启动春天,但运气不好
有没有想过我会做错什么
编辑:
这里有更多信息。我关注的形式是:
module MyConcern
extend ActiveSupport::Concern
included do
puts "Included!"
private
def concern_method
puts "Method is called!"
"expected_value"
end
end
end
当测试失败时(我使用bundle exec RSpec
显式运行RSpec),我会收到一条非常典型的失败消息:
Failure/Error: assigns(:value).should eq "expected_value"
expected: "expected_value"
got: nil
(compared using ==)
我的Guardfile的顶部就是guard:rspec,cmd:'bundle exec spring rspec--color'
,即使我从该命令中删除spring
,这种行为也是一样的。我真的不知道如何调试它。我认为它将被用作基类,如果你不通过它,它将使用你描述的东西。所以你的测试是可疑的:)
尝试:
你能发布你用来运行命令和输出的rspec命令吗?对不起,我没有看到你的评论。我用更多的细节编辑了我的问题;让我知道这是否有帮助,或者我是否可以提供更多的信息。嗯。。。那么,为了证实您的说法,bundle exec-spring rspec--color
是否会导致测试失败或成功?失败。它通过的唯一方法是Guard在保存时检测到文件更改并自动运行测试。这不是一个测试顺序问题,因为即使在所有其他测试都关闭的情况下,bundle exec-spring-rspec
也会失败。。。奇怪的是,我最初的想法是关于考试顺序的。我们需要做的第一件事是弄清楚为什么guard测试会通过,因为在运行同一个命令时,我们从命令行得到了一个失败。我唯一能想到的是,您的环境(我指的是您的shell,bash/zsh/随便什么)中有什么东西干扰了测试?(直接作为rspec
或spring
的别名,或间接作为由您的代码ENV['MY_VAR']
读取的环境变量)这就是我所能想到的,而不是可怕的代码巫毒,我希望不是这样。:)
controller(ApplicationController) do
...
end