关注RSpec匿名控制器

Jac*_*lyn 5 ruby rspec ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)

现在这里是奇怪的部分.我用Guard测试.当Guard检测到spec文件的保存并运行此测试时,它会通过并Checkpoint!打印.每次,完全确定.我可以继续保存文件,它不断传递.(如果有帮助,Guard使用Spring并运行RSpec.)

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

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


编辑:

这是更多信息.我担心的格式是这样的:

module MyConcern
  extend ActiveSupport::Concern

  included do
    puts "Included!"

    private

    def concern_method
      puts "Method is called!"
      "expected_value"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

当测试失败时(从我明确地运行RSpec bundle exec rspec),我得到一个非常典型的失败消息:

Failure/Error: assigns(:value).should eq "expected_value"

       expected: "expected_value"
            got: nil

       (compared using ==)
Run Code Online (Sandbox Code Playgroud)

我的Guardfile的顶部只是guard :rspec, cmd: 'bundle exec spring rspec --color',即使spring从该命令中删除,这种行为也是一样的.我真的不知道如何调试这个.

bli*_*iof 1

我认为它controller接收一个将用作基类的参数,如果您不传递一个参数,它将使用您的东西describe。所以你的测试很可疑:)

尝试:

controller(ApplicationController) do
    ...
end
Run Code Online (Sandbox Code Playgroud)