Próbuję napisać prosty izolowany test dla metody kontrolera w mojej aplikacji Rails 4. Metoda pobiera identyfikator z ciągu zapytania, prosi model Project
o podanie niektórych wierszy z warstwy trwałości i renderuje wynik jako JSON.Jak wyprowadzić metodę klasy z class_double w RSpec?
class ProjectsController < ApplicationController
def projects_for_company
render json: Project.for_company(params[:company_id])
end
end
Zajmuję się krępowaniem metody for_company
. Oto kod próbuję:
require "rails_helper"
describe ProjectsController do
describe "GET #projects_for_company" do
it "returns a JSON string of projects for a company" do
dbl = class_double("Project")
project = FactoryGirl.build_stubbed(:project)
allow(dbl).to receive(:for_company).and_return([project])
get :projects_for_company
expect(response.body).to eq([project].to_json)
end
end
end
Odkąd zgaszone metodę for_company
, spodziewam wdrożenie metody mają być ignorowane. Jednakże, jeśli mój model wygląda następująco:
class Project < ActiveRecord::Base
def self.for_company(id)
p "I should not be called"
end
end
... Wtedy widzę, że I should not be called
jest faktycznie wydrukowane na ekranie. Co ja robię źle?
pytań do wcześniejszego siebie: Co pan jeszcze zrobić? Wygląda na to, że chcesz powiedzieć 'allow (Project) .to receive (: for_company) {[project]}' ... –