7

Ich habe nur eine einfache Frage, aber ich konnte keine Antwort finden.Rails - Testing JSON API mit Funktionstests

Meine Ruby on Rails 3.2.2 Anwendung haben eine JSON-API mit einer Geräte-Session-Authentifizierung.

Meine Frage ist: Wie kann ich diese API mit funktionalen oder Integrationstests testen - und gibt es eine Möglichkeit, eine Sitzung zu behandeln?

Ich habe kein Frontend, nur eine API, die ich tun kann GET. POST. STELLEN. und DELETE mit JSON Body.

Was ist der beste Weg, um dies automatisiert zu testen?

Beispiel neue Benutzer erstellen

POST www.exmaple.com/users

{ 
"user":{ 
    "email" : "[email protected]", 
    "password " : "mypass" 
    } 
} 

Antwort

16

Es ist leicht, mit funktionalen Tests zu tun. In einem Anwendungsbeispiel sie in spec/controllers/users_controller_spec.rb in Rspec legte ich würde:

require 'spec_helper' 

describe UsersController do 
    render_views # if you have RABL views 

    before do 
    @user_attributes = { email: "[email protected]", password: "mypass" } 
    end 

    describe "POST to create" do 

    it "should change the number of users" do 
     lambda do 
      post :create, user: @user_attributes 
     end.should change(User, :count).by(1) 
    end 

    it "should be successful" do 
     post :create, user: @user_attributes 
     response.should be_success 
    end 

    it "should set @user" do 
     post :create, user: @user_attributes 
     assigns(:user).email.should == @user_attributes[:email] 
    end 

    it "should return created user in json" do # depend on what you return in action 
     post :create, user: @user_attributes 
     body = JSON.parse(response.body) 
     body["email"].should == @user_attributes[:email] 
     end 
    end 

Natürlich können Sie Angaben über optimieren, aber das sollte Ihnen den Einstieg. Prost.

+1

Warum hast du mir rspec empfohlen? Was ist rspec und was ist der Unterschied zwischen rspec und normalen Tests? – Lailo

+0

Was meinst du mit "normalen Tests"? Ich mag Rspec für bequemes DSL und die Echtheit von Hilfsmethoden. Was benutzen Sie gerade? –

1

können Sie Benutzer Gurke (BDD), solche Fälle zu testen, zum Beispiel:

Feature: Successful login 
    In order to login 
    As a user 
    I want to use my super API 

    Scenario: List user 
    Given the system knows about the following user: 
     | email   | username | 
     | [email protected] | blabla | 
    When the user requests POST /users 
    Then the response should be JSON: 
    """ 
    [ 
     {"email": "[email protected]", "username": "blabla"} 
    ] 
    """ 

dann, Sie müssen nur Ihre Schritte schreiben, wo pickle gem 'd ist sehr nützlich

Verwandte Themen