gpt4 book ai didi

ruby-on-rails - RSpec 讨厌名为 :public when stubbing object 的 Rails 作用域

转载 作者:行者123 更新时间:2023-12-04 06:04:29 25 4
gpt4 key购买 nike

当我命名我的 rails 模型范围 :public 时,是我一个人还是全局 RSpec 行为,从这个模型初始化对象,并 stub 这个对象 Rspec 失败

class DocumentName < ActiveRecord::Base

scope :public, lambda{where( public: true) } #line 3
end

没什么特别的,Rails 应用程序有效
DocumentName.public  # => [ #DN, #DN, #DN... ]
# SELECT `document_names`.* FROM `document_names` WHERE `document_names`.`public` = 1

然而 RSpec 失败了
describe DocumentName do
let(:resource){DocumentName.new}
it do
resource.stub(:name).and_return('foo') #line 16
resource.save.should be true
end
end

Failure/Error: resource.stub(:name).and_return('foo')
ArgumentError:
wrong number of arguments (1 for 0)
# ./app/models/document_name.rb:3:in `block in <class:DocumentName>'
# ./spec/models/document_name_spec.rb:16:in `block (2 levels) in <top (required)>'

...最有趣的是,在这种情况下,我没有对那个范围做任何事情。

但是,如果我将此范围命名为 :public 以外的其他名称例如: :are_public :
class DocumentName < ActiveRecord::Base
scope :are_public, lambda{where( public: true) }
end

...一切都通过O_O
Rails 3.2.11 (but same thing on any 3.2.x)
Ruby ruby-2.0.0-rc1 ( but same for any ruby-1.9.3)
rspec-core (2.12.2)
rspec-expectations (2.12.1)
rspec-mocks (2.12.1)
rspec-rails (2.12.2)

最佳答案

privatepublic是 Ruby 的访问修饰符:

class User
private
def some_private_method
end

public
def some_public_method
end
end

虽然它们看起来像关键字,但它们实际上是方法调用。覆盖它们并不是一个好主意。

关于ruby-on-rails - RSpec 讨厌名为 :public when stubbing object 的 Rails 作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14521568/

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