Ruby on rails 关注RSpec匿名控制器

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

我试图在RSpec中测试Rails控制器的问题(尽管我不确定这一事实是否与我的问题有关),所以我想我应该使用匿名控制器。以下是我的设置:

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