我正在使用 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
关于这个例子我有几个问题
post 方法(和其他 REST 动词)的文档在哪里?
对象是如何创建的
MenuItem.any_instance.stubs(:valid?).returns(true)
传递给 Controller Action ?
问题 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/