【问题标题】:How can I get access to the class instance that is rendering my view in a test?如何访问在测试中呈现我的视图的类实例?
【发布时间】:2015-07-24 15:01:37
【问题描述】:

我正在尝试测试一个 rake 任务,该任务会抓取我的网站并将内容推送到弹性搜索服务器;任务工作正常。但是测试失败了,因为在一个视图中我随机选择了一些像这样的值:

[:breast,:ovarian][rand(2)]
(rand * 4)-2
rand(Date.new(2006)..Time.now.to_date)

这意味着我需要存根rand。为了存根rand,我需要访问调用它的类实例,在这种情况下,它是呈现我的视图的任何类。调用 puts self.class 只返回 Class 和一个 id,那么我怎样才能获得实例以便存根呢?

我可以将这些值作为实例变量从控制器传递到视图中,如果获取控制器会更容易的话。

【问题讨论】:

    标签: ruby-on-rails minitest stub rake-task


    【解决方案1】:

    长话短说:最好提取有问题的逻辑并将其放在帮助程序中。这样,您将能够轻松地对其进行存根,甚至在需要时对其进行单元测试。此外,这提高了代码的整体质量(任何逻辑都不应该属于视图)。

    另外,rand 是来自Kernelso it is already "stubable" 的方法

    【讨论】:

    • 我看不出这对我有什么帮助,因为我需要视图渲染类来存根混入的助手。我没有使用 Rspec,所以不,它不是全局存根的:@987654322 @
    • 抱歉,我没有想到您说的是集成测试。恕我直言,逻辑本身应该在单元测试中进行测试,而集成测试应该只测试组件之间的协作(即期望在这个对象上调用这个方法)。所以对助手进行单元测试,并断言它在集成测试中被调用,这是我的建议。请参阅stackoverflow.com/questions/2146040/… 了解如何对模块进行单元测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 2021-09-28
    • 1970-01-01
    • 2019-02-27
    相关资源
    最近更新 更多