关注RSpec匿名控制器

时间:2014-04-10 23:28:25

标签: 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
  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文件的保存并运行此测试时,它会通过并打印Checkpoint!。每次,完全确定。我可以继续保存文件,它不断传递。 (如果有帮助,Guard使用Spring并运行RSpec。)

但是当我使用RSpec命令运行测试时,它会失败。最奇怪的是,我原本预计会发生失败,因为匿名控制器设置会发生一些奇怪的事情并且无法找到路线,相反,它会导致测试失败的should。当我以这种方式手动运行RSpec时,Checkpoint!永远不会打印,表示匿名控制器操作未被​​调用。但是因为我没有得到路由错误,某些控制器操作必须被调用但我不知道是什么,因为我甚至没有任何其他匿名控制器带有{ {1}}可能发生冲突的功能。我试过重启春天 - 没有运气。

关于我可能做错什么的任何想法?


修改

这里有更多信息。我担心的格式是:

edit

当测试失败时(从我用module MyConcern extend ActiveSupport::Concern included do puts "Included!" private def concern_method puts "Method is called!" "expected_value" end end end 明确地运行RSpec),我得到了一个非常典型的失败消息:

bundle exec rspec

我的Guardfile的顶部只是Failure/Error: assigns(:value).should eq "expected_value" expected: "expected_value" got: nil (compared using ==) ,即使从该命令中删除guard :rspec, cmd: 'bundle exec spring rspec --color',这种行为也是一样的。我真的不知道如何调试这个。

1 个答案:

答案 0 :(得分:1)

我认为controller receives an argument将被用作基类,如果你没有通过它,它将使用你describe的东西。所以你的测试很可疑:)。

尝试:

controller(ApplicationController) do
    ...
end