【问题标题】:How can I mock an instance variable returned from a Client in rspec如何在 rspec 中模拟从客户端返回的实例变量
【发布时间】:2019-04-17 20:33:49
【问题描述】:

我有一个我调用的服务客户端,它返回一堆实例变量。我在一个方法中调用它,该方法在另一个方法中调用以返回响应

我希望我的方法像这样返回一个特定的方法

def returnsAlias
  model = ClientGem.find(id) #finds a bunch of instance variables by id
  model.alias #returns @alias
end

在我的规范中,我有

allow(ClientGem).to receive(:find).and_return('Test Alias')

我不确定用什么替换“测试别名”。我尝试了@alias 并使用

@alias.instance_variable_set(:@alias, 'Test Alias')

但这会返回此错误

FrozenError:
   can't modify frozen NilClass

【问题讨论】:

    标签: ruby-on-rails ruby rspec rubygems instance-variables


    【解决方案1】:

    简单地将对象本身存根。

    model = instance_double(ClientGemReturnedKlass, alias: 'Test Alias')
    allow(ClientGem).to receive(:find).and_return(model)
    

    【讨论】:

    • 嗯。我收到一个错误the ClientGem::Model class does not implement the instance method: alias
    • 你在代码中调用了model.alias,所以我假设从ClienGem.find(id)返回的类是别的东西
    • .find(id) 返回一堆实例变量,我可以使用.alias 访问其中一个变量
    • 你说的没有道理,没有函数调用返回实例变量,它们返回对象。从ClientGem.find(id) 返回什么对象?如果你做ClientGem.find(id).class,返回什么?
    • 啊,谢谢。 gem 的文档令人困惑。他们使用.class 返回对象,但他们在文档中有实例变量。 ¯_(ツ)_/¯
    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多