3

我正在尝试为inherited_resources 控制器编写规范。我决定使用 rspec 的 mock_model 来模拟与数据库的所有集成。不幸的是,我无法为创建和更新操作编写规范,因为我收到以下错误:https ://gist.github.com/936947 有人可以帮我解决这个问题吗?

4

2 回答 2

4

我在使用 flexmock 时遇到了同样的问题。

原因是它没有使用该update_attributes方法进行路由决策。它检查resource.errors以查看它是否为空。

因此,为了让它正确响应,我们还需要模拟出该errors方法。

这是 lib/inherited_resources/base_helpers.rb 中的相关代码@line 248

  def respond_with_dual_blocks(object, options, &block) #:nodoc:
    args = (with_chain(object) << options)

    case block.try(:arity)
      when 2
        respond_with(*args) do |responder|
          blank_slate = InheritedResources::BlankSlate.new
          if object.errors.empty?
            block.call(responder, blank_slate)
          else
            block.call(blank_slate, responder)
          end
        end
      when 1
        respond_with(*args, &block)
      else
        options[:location] = block.call if block
        respond_with(*args)
    end
  end
于 2011-04-28T21:02:26.310 回答
0

失败消息是关于无法从控制器内部访问命名路由,所以我不确定这与 mock_model 有什么关系。您是否使用真实模型尝试过相同的示例?

于 2011-04-22T16:49:12.823 回答