ruby-on-rails - Rails Controller 测试中的变量传递

标签 ruby-on-rails testing rspec mocha.js

我正在使用 RSpec 和 Mocha 进行一些 Controller 测试。这是一个例子

describe MenuItemsController, "creating a new menu item" do
  integrate_views
  fixtures :menu_items

  it "should redirect to index with a notice on successful save" do
    MenuItem.any_instance.stubs(:valid?).returns(true)
    post 'create'
    assigns[:menu_item].should_not be_new_record
    flash[:notice].should_not be_nil
    response.should redirect_to(menu_items_path)
  end
end

关于这个例子我有几个问题

  1. post 方法(和其他 REST 动词)的文档在哪里?

  2. 对象是如何创建的

    MenuItem.any_instance.stubs(:valid?).returns(true)

    传递给 Controller ​​ Action ?

  3. 问题 2 与通过 post 方法直接将参数传递给 Controller ​​有何不同?

最佳答案

1.

对于 Post

对于 Get

对于 Put

对于 Delete

2.

并没有真正通过。 您正在配置测试用例,以便 鉴于对 valid? 的调用是由 MenuItem 实例进行的。 然后将使用您的 stub ,并且此有效? 检查的结果将为真。 您正在决定此 valid? 调用将返回什么

3.

当你 stub 时,当测试运行时,而不是正常执行代码, 对于 MenuItem 实例上的这个特定有效?;您的代码不会尝试确定您的 menuItem 是否有效。它只会返回您在 stub 中指定的值。在你的情况下是真的

因此在这里您不是在测试您的 MenuItem 实例是否在给定正确 参数的情况下返回 true,而是在测试当您的 MenuItem 实例返回 true 时发生了什么。

如果您可以轻松地设置一个带有始终导致 有效的参数的帖子,那么在这里对您来说可能并没有什么用处? == true 用于您的 MenuInstance 项目。

但是例如,当您有一段连接到 Web 服务的代码时,您可以使用一个返回 Connection Unavailable 的 stub 来测试当 Web 服务关闭时代码中发生的情况。 p>

关于ruby-on-rails - Rails Controller 测试中的变量传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1676619/

相关文章:

unit-testing - 模拟聚合类

java - 在 Mockito 中捕获一个参数

ruby - 为什么必须将对象属性包装在 block 中以检查它是否引发错误?

ruby-on-rails - 由于 ActiveAdmin 中的初始化常量,Rspec 无法运行

ruby-on-rails - 无法访问 RSpec 测试中的变量

ruby-on-rails - cancan + rspec = 未初始化常量 Anonymou(无 s)?

ruby-on-rails - before_save , before_validation :on => :save

ruby-on-rails - 销毁最后一个 has_many 后的关联 :through record is deleted

ruby-on-rails - 无法按日期找到记录 [Rails 4]

ruby-on-rails - 主动管理多个文件/图像上传与回形针