私はいくつかの概念を試して苦労しています。私は、アイデアはモックとスタブを通じて分離で物事をテストすることであることを理解しかし、次に苦しんでいます:RSpec - 配列メソッドへのアクセス
class Circle
has_many :jobs
def accepted
jobs.where('sitter_id > 0')
end
end
class Job
belongs_to :circle
end
そして、私のRSpecの:
require 'rails_helper'
RSpec.describe Circle, type: :model, focus: true do
let (:circle_1) { FactoryGirl.create(:circle, title: 'London',
location: 'London',
administrator_id: 1) }
let (:job_1) { FactoryGirl.create(:job, start_time: "2016-11-14 20:00:00",
end_time: "2016-11-14 23:00:00",
tokens_offered: 6,
requester_id: 1,
circle_id: 1,
sitter_id: 5,
actual_start_time: "2016-11-14 20:00:00",
actual_end_time: "2016-11-14 23:30:00",
tokens_paid: 7) }
before do
circle_1.stub(:jobs).and_return([job_1])
end
describe 'instance methods' do
context 'accepted' do
it 'should return jobs with a sitter' do
expect(circle_1.accepted).to include(job_1)
end
end
end
end
これは、その結果:
NoMethodError:
undefined method `where' for #<Array:0x007feb4ae72858>
配列のwhereメソッドの動作をスタブしますか?私が混乱していることは、確かに私がテストしていることです。スタブすることによって、コード自体をテストするのではなく、コードが何をしているのかを基本的にテストしていますか?
私がこの間違いを理解しているかどうか、誰かがどのようにテストを書き直すか、またはそれをどのようにして渡すことができるかを説明することができれば、非常に感謝しています。
'circle_id:circle_1.id' - ' jobs'をスタブする必要はありません –
circle_1.jobsを呼び出すときにジョブが返されていますが、RSpecはどのようにして配列から 'どこ'私はあなたが配列としてそれをスタブので、 – Mark
を参照してください、私が提案し何を行うことができます;) –