我想在我的Rails 4應用程序中爲控制器方法編寫一個簡單的獨立測試。該方法從查詢字符串中獲取ID,要求Project
模型向我提供持久層的一些行,並將結果呈現爲JSON。如何在RSpec中用class_double存根類方法?
class ProjectsController < ApplicationController
def projects_for_company
render json: Project.for_company(params[:company_id])
end
end
我正在努力剔除for_company
方法。下面是我想要的代碼:
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
自從我掐滅了for_company
方法,我期望該方法的實現被忽略。但是,如果我的模型是這樣的:
class Project < ActiveRecord::Base
def self.for_company(id)
p "I should not be called"
end
end
...然後我可以看到I should not be called
實際打印到屏幕上。我究竟做錯了什麼?
問題包裝更早自己:什麼是你甚至想幹什麼?看起來你真的想說'允許(項目)。接收(:for_company){[項目]}'... – 2016-01-19 23:42:23