Ich bin neu zu testen und mit einigen der Konzepte zu kämpfen. Ich verstehe die Idee ist, die Dinge in der Isolation durch Mocks und Stubs zu testen, jedoch mit den folgenden habe Schwierigkeiten:RSpec - Zugriff auf Array-Methoden
class Circle
has_many :jobs
def accepted
jobs.where('sitter_id > 0')
end
end
class Job
belongs_to :circle
end
Und mein 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
Daraus ergibt sich:
NoMethodError:
undefined method `where' for #<Array:0x007feb4ae72858>
Würde ich dann das Verhalten der Where-Methode auf dem Array stub? Was mich verwirrt, ist sicherlich, dass ich genau das teste, was ich teste, und indem ich es stubbe, sage ich dem Test, was der Code tut, anstatt den Code selbst zu testen.
Wenn jemand erklären könnte, wenn ich das falsch verstehe, und wie ich den Test entweder neu schreiben oder durchgehen lassen kann, würde ich es sehr schätzen.
'circle_id: circle_1.id' - und keine Notwendigkeit, die' Jobs' zu stubben –
Der Job wird zurückgegeben, wenn Circle_1.jobs aufgerufen wird, es ist nur RSpec nicht wissen, wo auf dem Array von wo what ' ich kann – Mark
sehen, weil Sie es als Array Stummel, tun, was ich vorgeschlagen;) –