gpt4 book ai didi

ruby-on-rails - Rspec:如何在 Controller 规范中分配实例变量

转载 作者:行者123 更新时间:2023-12-03 07:17:59 25 4
gpt4 key购买 nike

class TestController < AplicationController
#....

private

def some_method
unless @my_variable.nil?
#...
return true
end
end
end

我想直接在 Controller 规范中测试some_method:

require 'spec_helper'

describe TestController do
it "test some_method"
phone = Phone.new(...)
controller.assign(:my_variable,phone) #does not work
controller.send(:some_method).should be_true
end
end

如何从 Controller 规范设置 TestController 实例变量 @my_variable

最佳答案

在 Controller 中测试私有(private)方法时,我倾向于使用 anonymous controller 而不是使用 send由于不想直接调用私有(private)方法,而是调用私有(private)方法的接口(interface)(或者,在下面的测试中,有效地 stub 该接口(interface))。所以,就你而言,也许是这样的:

require 'spec_helper'

describe TestController do
controller do
def test_some_method
some_method
end
end

describe "a phone test with some_method" do

subject { controller.test_some_method }

context "when my_variable is not nil" do
before { controller.instance_variable_set(:@my_variable, Phone.new(...)) }
it { should be_true }
end

context "when my_variable is nil" do
before { controller.instance_variable_set(:@my_variable, nil) }
it { should_not be_true } # or should be_false or whatever
end
end
end

this StackOverflow Q&A 中对直接测试私有(private)方法的问题有一些很好的讨论。 ,这让我倾向于使用匿名 Controller ,但您的意见可能不同。

关于ruby-on-rails - Rspec:如何在 Controller 规范中分配实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16005281/

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