gpt4 book ai didi

ruby-on-rails-3 - rails/rspec 中请求规范的 stub 辅助方法

转载 作者:行者123 更新时间:2023-12-04 07:08:51 26 4
gpt4 key购买 nike

我有一个名为 get_books_from_amazon 的辅助方法,它执行 API 调用并返回一组书籍。我不知道如何在我的请求规范中将它 stub 。

module BooksHelper
def get_books_from_amazon(search_term)
...
end
end

class StaticController < ApplicationController
include BooksHelper
def resources
@books = get_books_from_amazon(search_term)
end
end

我在我的规范中尝试了以下内容,但都无济于事:
# spec/requests/resource_pages_spec.rb
...
describe "Navigation" do
it "should do such and such" do
BooksHelper.stub!(:get_books_from_amazon).and_return(book_array)
StaticHelper.stub!(:get_books_from_amazon).and_return(book_array)
ApplicationHelper.stub!(:get_books_from_amazon).and_return(book_array)
StaticController.stub!(:get_books_from_amazon).and_return(book_array[0..4])
ApplicationController.stub!(:get_books_from_amazon).and_return(book_array[0..4])
request.stub!(:get_books_from_amazon).and_return(book_array)
helper.stub!(:get_books_from_amazon).and_return(book_array)
controller.stub!(:get_books_from_amazon).and_return(book_array)
self.stub!(:get_books_from_amazon).and_return(book_array)
stub!(:get_books_from_amazon).and_return(book_array)

visit resources_path
save_and_open_page
end

关于问题出在哪里的任何想法?

最佳答案

帮助程序通常用于清理表示“逻辑”,因此我不会在帮助程序方法中放置诸如对亚马逊 API 的调用之类的内容。

相反,将该方法移动到一个普通的旧 Ruby 类,您可以从 Controller 调用该类。
一个例子可能是:

class AmazonBookRetriever
def get_books_from_amazon
#code here
end
end

然后你的 Controller 可以调用它:
def resources
@books = AmazonBookRetriever.new.get_books_from_amazon(params[:search_term])
end

这应该会使模拟更容易。您可以在 #new 上 stub AmazonBookRetriever 以返回模拟,并验证它是否收到 get_books_from_amazon 消息。

关于ruby-on-rails-3 - rails/rspec 中请求规范的 stub 辅助方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13036718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com