アプリとリモコンをテストしようとしています。Rails 3.2 と最新バージョンの vcr と fakeweb を使用しています。実際、私はRailsCastを見てきましたが、アンチテストをしたいのですが、できません。
私のリクエストテストファイル;
require "spec_helper"
describe "ZipCodeLookup" do
it "show Beverly Hills given 90210", :vcr do
visit root_path
fill_in "zip_code", with: "90210"
click_on "Lookup"
page.should have_content("Beverly Hills")
end
it "any errors" do
visit root_path
fill_in "zip_code", with: "9"
click_on "Lookup"
page.should have_content("Nomethods")
end
end
page.sho 行で動けなくなることはありません。アンチテストを作成する方法を試しました。
そして私のモデル;
class ZipCode
attr_reader :state, :city, :area_code, :time_zone
def initialize(zip)
client = Savon::Client.new("http://www.webservicex.net/uszip.asmx?WSDL")
response = client.request :web, :get_info_by_zip, body: { "USZip" => zip }
data = response.to_hash[:get_info_by_zip_response][:get_info_by_zip_result][:new_data_set][:table]
@state = data[:state]
@city = data[:city]
@area_code = data[:area_code]
@time_zone = data[:time_zone]
end
end
そして、実行時のエラーbundle exec rspec spec/requests/zip_code_lookup_spec.rb
Ender-iMac:zip_coder-after ender$ bundle exec rspec spec/requests/zip_code_lookup_spec.rb
HTTPI executes HTTP GET using the net_http adapter
SOAP request: http://www.webservicex.net/uszip.asmx
SOAPAction: "http://www.webserviceX.NET/GetInfoByZIP", Content-Type: text/xml;charset=UTF-8, Content-Length: 389
<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://www.webserviceX.NET" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ins0="http://www.webserviceX.NET"><env:Body><ins0:GetInfoByZIP><ins0:USZip>90210</ins0:USZip></ins0:GetInfoByZIP></env:Body></env:Envelope>
HTTPI executes HTTP POST using the net_http adapter
SOAP response (status 200):
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetInfoByZIPResponse xmlns="http://www.webserviceX.NET"><GetInfoByZIPResult><NewDataSet xmlns=""><Table><CITY>Beverly Hills</CITY><STATE>CA</STATE><ZIP>90210</ZIP><AREA_CODE>310</AREA_CODE><TIME_ZONE>P</TIME_ZONE></Table></NewDataSet></GetInfoByZIPResult></GetInfoByZIPResponse></soap:Body></soap:Envelope>
.HTTPI executes HTTP GET using the net_http adapter
F
Failures:
1) ZipCodeLookup any errors
Failure/Error: click_on "Lookup"
FakeWeb::NetConnectNotAllowedError:
Real HTTP connections are disabled. Unregistered request: GET http://www.webservicex.net/uszip.asmx?WSDL. You can use VCR to automatically record this request and replay it later. For more details, visit the VCR documentation at: http://relishapp.com/myronmarston/vcr/v/1-11-3
# ./app/models/zip_code.rb:6:in `initialize'
# ./app/controllers/zip_code_lookup_controller.rb:3:in `new'
# ./app/controllers/zip_code_lookup_controller.rb:3:in `index'
# (eval):2:in `click_on'
# ./spec/requests/zip_code_lookup_spec.rb:15:in `block (2 levels) in <top (required)>'
Finished in 0.17138 seconds
2 examples, 1 failure
Failed examples:
rspec ./spec/requests/zip_code_lookup_spec.rb:12 # ZipCodeLookup any errors
VCR が同じ HTTP 要求を異なる状態で実行できない理由がわかりません。
アンチテストの方法でテストするにはどうすればよいですか?
解決
申し訳ありませんが、私の間違いでした :( 「it」の説明行に :vcr と書くのを忘れていました。次のようにする必要があります。
it "any errors", :vcr do
visit root_path
fill_in "zip_code", with: "9"
click_on "Lookup"
page.should have_content("Nomethods")
end