gpt4 book ai didi

ruby-on-rails - 如何在 RSpec 中使用 class_double stub 类方法?

转载 作者:数据小太阳 更新时间:2023-10-29 06:59:03 25 4
gpt4 key购买 nike

我正在尝试为我的 Rails 4 应用程序中的 Controller 方法编写一个简单的独立测试。该方法从查询字符串中获取一个 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 方法进行了 stub ,所以我希望该方法的实现被忽略。但是,如果我的模型看起来像这样:

class Project < ActiveRecord::Base

def self.for_company(id)
p "I should not be called"
end

end

…然后我可以看到 I should not be called 实际上被打印到屏幕上了。我做错了什么?

最佳答案

class_double 实际上并没有替换常量。可以调用as_stubbed_const替换原来的

class_double("Project").as_stubbed_const

这只是 stub_const 的便利包装器

关于ruby-on-rails - 如何在 RSpec 中使用 class_double stub 类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26202116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com