我是新來測試和掙扎的一些概念。我理解的想法是通過嘲弄和存根來隔離測試的東西,但是我用下面的掙扎: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' - 並且不需要存根'作業' –
調用circle_1.jobs時返回該作業,它只是RSpec不知道如何從數組中調用'where'我可以看到 – Mark
因爲你存根它爲陣,做什麼我建議) –