如何在黄瓜中添加方法?

sia*_*mii 3 ruby rspec ruby-on-rails stub cucumber

我想在SubmissionsController中存根space_available_mb方法,使其返回5。这是行不通的。它返回实际硬盘上的正确空间。

如果space_available_mb已注释掉,则会引发期望错误,这意味着should_receive可以正常工作。但是,它不会返回5,而是返回实数,这意味着and_return由于某种原因而失败。

进一步的调试显示该and_return调用实际上已被调用,但仅在该方法运行并返回实数之后才进行调用。

Scenario: Hard Disk Space is low on new submission
  Given I am on the new_submission page
  And hard disk space is low
  Then I should see "Low disk space!"

Given /^hard disk space is low$/ do
  SubmissionsController.should_receive(:space_available_mb).and_return(5)
end

class SubmissionsController < ApplicationController
  include FileManager

  def new
    space = space_available_mb
    ...
  end
end

module FileManager
  def space_available_mb
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

far*_*noy 5

根据模拟框架的不同,语法也会有所不同,但是您要完成的工作是在控制器的任何实例上添加方法。在RSpec中,您有this。因此,根据您的尝试:

Given /^hard disk space is low$/ do
  SubmissionsController.any_instance.should_receive(:space_available_mb).and_return(5)
end
Run Code Online (Sandbox Code Playgroud)

如果您打算使用任何其他模拟框架,那么肯定会有像any_instanceRSpec这样的方法。

  • @davidtingsu,您需要rspec双打。将以下内容放入黄瓜的env.rb文件中:`require'cucumber / rspec / doubles'` (3认同)