将params传递给控制器​​的rspec测试

时间:2017-03-23 21:12:43

标签: ruby-on-rails ruby rspec

我无法为我所做的事情设置规范。我知道它按照我想要的方式工作,因为我已经手动测试了这个,但我知道我是否仍然需要与之相关的规范。

我有一个玩家索引,我还有一些能够分配优先级玩家的团队。通过执行该分配,它们从生成索引的初始控制器中拉出。

对于团队部分,我只有一个ajax调用,我正在传递params

ajax:
  url: "#{admin_players_path(disabled: 'false')}"
  dataType: 'json'

这是控制器,我在那里有一个条件来说明来自团队页面的请求。

 def index
    @q = @player.search(params[:q])

    if params[:disabled] == 'false'
      @player = @q.result(distinct: true).enabled
    else
      @player = @q.result(distinct: true)
    end
  end

这基本上就是我在应用程序方面所做的一切,而且效果很好。如果我要求普通索引中的玩家,它会向我显示禁用和启用它们,如果我想分配优先级玩家,它只显示我启用的玩家。

我的问题围绕着我的规范,因为我无法正确设置这些内容来解决这个问题。

context "with a prioritized player set up" do
  let(:params) { { disabled: false } }

  let!(:player1) { create(:player, disabled: true, disabled_at: Time.current) }
  let!(:player2) { create(:player) }

  it 'returns only enabled players' do
    get :index, params: params

    expect(assigns[:player]).to_not include(player1)
  end
end

无论我如何设置我的规范,我都无法按照我喜欢的方式获得正确的条件,并且不断让规范失败。有人会知道我错过了这个吗?

1 个答案:

答案 0 :(得分:0)

好的,经过一番努力后,我能够弄清楚这需要什么。

在ajax网址中,我将参数设置为disabled: 'false'

但在规范中,我将参数设置为let(:params) { { disabled: false } }

问题是在ajax调用中我将事物设置为字符串,但在规范中我将它们设置为布尔值。

我所要做的就是将设置更改为let(:params) { { disabled: ‘false' } }

并且规格都很好!