我是否正确地清除了数据



想象一下,我有一个使用Twitter API的应用程序。在我的应用程序中,我只有一个文本区域和一个按钮,如果我在其中提交表单,它将推特到我的帐户。

在我的应用程序中,我有以下路线:

resources :tweets, :only => [:index, :new, :create]

在我的控制器中,我有:

class TweetsController < ApplicationController
def index
@tweets = [JSON RESPONSE FROM API (LIST OF TWEETS)]
end
def create
@tweet = [POST REQUEST TO CREATE A TWEET]
flash[:notice] = 'Tweet has been created successfully.'
redirect_to tweets_path
end
end

在我的视图文件中:

<ul>
<% @tweets.each do |tweet| %>
<li><%= tweet %></li>
<% end %>
</ul>

现在这一切都很好。但在测试应用程序时,我使用的是Rspec和Capybara。

在我的测试文件中,我有这样的代码:

require 'rails_helper'
feature 'User creates' do
scenario 'a tweet' do
visit new_tweet_path
fill_in 'Tweet', :with => 'My Example Tweet'
click_on 'Submit'
expect(page).to have_content 'My Example Tweet'
expect(page).to have_content 'Tweet has been created successfully.'
end
end

这个测试文件成功了,但问题是它"创建"了真实的数据。每当我运行测试时,我不想用伪数据填充我的帐户。

上面的测试以HTML文档的形式返回page.body,它呈现了上面的视图。因此,上面测试的成功返回如下内容:

Tweet has been created successfully.
<ul>
<li>Tweet</li>
<li>My other tweet</li>
<li>My Example Tweet</li>
</ul>

正如你所看到的,这是因为create重定向到索引,该索引获取所有tweet并对其进行迭代。但每次我运行测试时,它都会调用API。

就在那时,我发现了存根数据。

我用Puffing Billy在我的测试中创建一个存根。

在我的测试中,我这样使用它:

require 'rails_helper'
feature 'User creates' do
scenario 'a tweet' do
proxy.stub(tweets_url, :method => :post).and_return(
:json => {
"status"=>"OK",
"message"=>"Tweet has been created successfully.",
"data"=>{
"tweet"=>"My Example Tweet",
}
}
)
visit new_tweet_path
fill_in 'Tweet', :with => 'My Example Tweet'
click_on 'Submit'
expect(page).to have_content 'My Example Tweet'
expect(page).to have_content 'Tweet has been created successfully.'
end
end

基本上,我在我的创建方法上清除数据。这个测试用例成功了,但问题是这不是我的应用程序的工作方式。

正常的过程是,它会将我重定向到索引,以检查页面是否有内容。

但在存根之后,它只会简单地返回JSON,而不是HTML文档。

是这样做的,还是我做错了什么?

Puffing Billy是一个可编程的代理,可用于存根来自浏览器的请求。在您的情况下,您要存根的请求来自您的应用程序,而不是浏览器。通常,来自应用程序的请求会使用WebMock或编写虚假服务来拦截。文章-https://robots.thoughtbot.com/how-to-stub-external-services-in-tests-对来自应用程序内部的存根请求有一个很好的摘要。

另一个潜在的选择是,如果你用来与twitter通信的任何库都提供自己的测试模式。

相关内容

  • 没有找到相关文章

最新更新