2013-07-20 1 views
3

У меня возникли трудности с написанием спецификаций для моей программы, так как мне нужно проверить идентификатор 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    

конец

+1

'if! Username.nil? '=>' if username' – apneadiving

+2

вы должны использовать что-то вроде webmock, чтобы высмеивать http-вызов – apneadiving

+1

Или видеомагнитофон: https://github.com/vcr/vcr – Nobita

ответ

Смежные вопросы