ruby-on-rails – 如何在RSpec中使用class_double存根类方法?
发布时间:2020-12-16 23:10:53 所属栏目:百科 来源:网络整理
导读:我正在尝试在我的Rails 4应用程序中为控制器方法编写一个简单的隔离测试.该方法从查询字符串中获取ID,要求Project模型为持久层提供一些行,并将结果呈现为 JSON. class ProjectsController ApplicationController def projects_for_company render json: Proj
我正在尝试在我的Rails 4应用程序中为控制器方法编写一个简单的隔离测试.该方法从查询字符串中获取ID,要求Project模型为持久层提供一些行,并将结果呈现为
JSON.
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 …然后我可以看到我不应该被调用实际打印到屏幕上.我究竟做错了什么? 解决方法
class_double实际上并不替换常量.您可以调用as_stubbed_const来替换原始文件
class_double("Project").as_stubbed_const 这只是stub_const的一个便利包装器 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |