2016-12-20 4 views
0

私はヘルパーにメソッドを持っており、タグとコードに基づいて特定のフラグ(enabled)クッキー。Rails:mysqlクエリを実行するヘルパーメソッドをテストするにはどうすればいいですか?

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 

しかし、それは偽を返し、私は本当に何が欠けているのか分かりません。ここで

+0

あなたは 'create'がレコードを作成していますか? 'create'の代わりに' create! 'を試してください – Deep

+0

はい、それだけを確認してレコードを作成しています。 – abpetkov

+0

あなたのテストで1行1列の 'where'条件をコメントアウトし、いずれの場合にもtrueを返すかどうかを確認してください。 –

答えて

0

は、私はこの問題を解決するためにやったことだ:

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 
関連する問題