1

アプリとリモコンをテストしようとしています。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
4

0 に答える 0