【问题标题】:rspec test for passing params into a controllerrspec 测试将参数传递给控制器
【发布时间】:2017-03-24 23:10:37
【问题描述】:

我在为我所做的事情设置规范时遇到了麻烦。我知道它正在按照我想要的方式工作,因为我已经手动测试了它,但我知道我是否仍然想要与之关联的规范。

我有一个球员索引,我也有一部分球队可以分配优先球员。通过进行分配,他们从生成索引的初始控制器中提取。

对于团队部分,我只有一个 ajax 调用,我在其中传递参数

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

无论我如何尝试设置我的规范,我都无法以我想要的方式获得正确的条件,并且不断让规范失败。有人知道我缺少这个吗?

【问题讨论】:

  • 您能否发布失败的规范输出,因为如果没有失败的规范产生的错误消息就很难调试?
  • 这对我来说有点棘手,但我确实得到了Failure/Error: expect(assigns[:players]).to_not include(player1),这告诉我我没有正确设置规范。具体来说,我正在努力的是测试我在规范中的条件的另一面。 ` if params[:disabled] == 'false' @player = @q.result(distinct: true).enabled` 绝对无法正确设置控制器的该部分。

标签: ruby-on-rails ruby rspec


【解决方案1】:

好的,经过一些工作后,我能够弄清楚其中需要什么。

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

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

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

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

而且规格都很好!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多