【问题标题】:Rails: how do I test a helper method that executes a mysql queryRails:如何测试执行 mysql 查询的辅助方法
【发布时间】:2016-12-20 11:47:21
【问题描述】:

我在帮助程序中有一个方法,它根据存储在 cookie 中的标签和代码确定用户是否具有特定标志 (enabled)。

def user_enabled?
  Code.joins({tags: :user}).
    where(code: cookies[:user_code]).
    where(users: {enabled: true})
    exists?
end

基本上,标签与用户相关联,代码与标签相关联。

我不确定如何在我的规范中重新创建它,以便查询执行所需的所有记录。到目前为止,我有:

it 'returns true when enabled is checked' do
  tag = create(:tag, user: create(:user, enabled: true))
  Code.create(code: 'enabled', tags: [tag])
  cookies[:user_code] = 'enabled'
  expect(user_enabled?).to be_truthy
end

但这会返回 false,我不确定我错过了什么。

【问题讨论】:

  • 您确定create 正在创建记录吗?试试create! 而不是create
  • 是的,只是确保了这一点,它正在创造记录。
  • 尝试在您的测试中一一注释掉where 条件,看看它是否在任何情况下都返回true。

标签: mysql ruby-on-rails rspec


【解决方案1】:

这是我为解决此问题所做的:

Context 'some context'
  let!(:tag) { create(:tag, user: create(:user)) }
  let!(:code) { create(:code, code: 'enabled', tags: [tag]) }

  it 'returns true when enabled is checked' do
    cookies[:user_code] = 'enabled'
    expect(user_enabled?).to be_truthy
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    • 2010-12-24
    • 2011-08-03
    相关资源
    最近更新 更多