У меня возникли трудности с написанием спецификаций для моей программы, так как мне нужно проверить идентификатор facebook после заполнения всей необходимой информации о формате. Мой идентификатор facebook извлекается из ответа JSON, поэтому я не уверен, как это изобразить в моих спецификациях. Я очень новичок в этой области, и я давно застрял в этом вопросе. Я буду признателен, если есть несколько примеров кода, которые помогут мне в этом. Ниже приведены мои полные спецификации.WebMock: Rspec - проверка Facebook с помощью ответа JSON
Сценарий: используйте функцию Fbid для проверки подлинности страницы facebook с помощью «http://graph.facebook.com» (JSON Response), чтобы совпадать, если username и fbid совпадают.
Мой GitHub URL: https://github.com/amycheong/company_list
Обновлено: Я использовал WebMock, но в конечном итоге получить:
1) Companies new company create with valid information correct facebook id should validate fbid
Failure/Error: Company.validate_fbid('pepsi')['username'].should == "pepsi"
WebMock::NetConnectNotAllowedError:
Real HTTP connections are disabled. Unregistered request: GET http://graph.facebook.com:443/pepsi with headers {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}
You can stub this request with the following snippet:
stub_request(:get, "http://graph.facebook.com:443/pepsi").
with(:headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).
to_return(:status => 200, :body => "", :headers => {})
registered request stubs:
stub_request(:get, "https://graph.facebook.com/pepsi")
============================================================
Я использовал WebMock.disable_net_connect (: разрешить => "https://graph.facebook.com/"), но проблема по-прежнему Продолжать.
MODEL файл:
def self.validate_fbid(fbid, format = :json)
uri = URI.parse("https://graph.facebook.com/#{fbid}")
data = Net::HTTP.get(uri)
return JSON.parse(data['username'])
end
SPEC файл:
before(:each) do
stub_request(:get, "https://graph.facebook.com/pepsi").to_return(:body => { 'username' => 'pepsi'})
end
describe "correct facebook id" do
#validate fbid
it "should validate fbid" do
Company.validate_fbid('pepsi')['username'].should == "pepsi"
WebMock.should have_requested(:get, "https://graph.facebook.com/pepsi")
end
end
CONTROLLER:
def create
@company = Company.new(params[:company])
uri = URI("http://graph.facebook.com/" + @company.fbid)
data = Net::HTTP.get(uri)
username = JSON.parse(data)['username']
if !username.nil?
if @company.name.downcase == username.downcase
if @company.save
@message = "New company created"
redirect_to root_path
else
@message = "Company create attempt failed. Please try again."
render 'new'
end
else
@message = "Invalid facebook id"
render 'new'
end
else
@message = "No such facebook id"
render 'new'
end
конец
'if! Username.nil? '=>' if username' – apneadiving
вы должны использовать что-то вроде webmock, чтобы высмеивать http-вызов – apneadiving
Или видеомагнитофон: https://github.com/vcr/vcr – Nobita