2016-04-08 7 views
1

Ich möchte den gleichen rpsec Testfall verwenden, um verschiedene Websites zu testen, zum Beispiel kann ich alle Standorte auf einmal testen, und ich kann auch einen von ihnen testen zu einer Zeit. Würde es Ihnen etwas ausmachen, mir Ratschläge zu geben? Wie kann ich das auf einfache Weise machen?Wie man den gleichen rpsec Testfall verwendet, um unterschiedliche Seite zu testen

Ich gem installieren rspec, nicht rspec-Schienen. Dies ist mein Code

require 'spec_helper' 
require 'net/http' 
require 'json' 
require 'uri' 


describe 'mywebsite1' do 
    uri = URI.parse('http://mywebsite1/') 
    initheader = {'Content-Type' =>'application/json'} 
    req = Net::HTTP::Post.new(uri, initheader) 

describe 'common_test' do 
    payload = JSON.parse(open("file.json").read) 
    req.body = payload.to_json 
    context 'case1' do 
    res = Net::HTTP.start(uri.host, uri.port) do |http| 
    http.request(req) 
    end 
    result = JSON.parse(res.body) 
    it "should response with the code 201" do 
    expect("#{res.code}").to eq '201' 
    end 
    specify "status is Ready" do 
    expect(result['item']['status']).to eq 'Ready' 
    end 
    specify "type is All" do 
    expect(result['item']['type']).to eq 'All' 
    end 
end 
    context 'case2' do 
    ... 
    end 
    end 
end 

Antwort

3

Sie shared_examples_for können Sie eine Reihe von Beispielen zwischen verschiedenen Spezifikationen zur Wiederverwendung, zum Beispiel

shared_examples_for 'a website' do 
    context 'case1' do 
    let(:req) { 
     Net::HTTP::Post.new(uri, {'Content-Type' => 'application/json'}) 
    } 

    let(:res) { 
     Net::HTTP.start(uri.host, uri.port) do |http| 
     http.request(req) 
     end 
    } 

    it 'should respond with 201' do 
     expect(res.code.to_i).to eq(201) 
    end 
    end 
end 

Dann, wenn Sie möchten, die gemeinsam benutzten Beispiele Sie it_should_behave_like verwenden verwenden und den Namen der gemeinsam benutzten Beispiele passieren, z.B.

describe 'my website' do 
    it_should_behave_like 'a website' do 
    let(:uri) { URI.parse('http://mywebsite') } 
    end 
end 

describe 'a different website' do 
    it_should_behave_like 'a website' do 
    let(:uri) { URI.parse('http://anotherwebsite') } 
    end 
end 

Sie können weitere Details siehe bei https://www.relishapp.com/rspec/rspec-core/v/2-0/docs/example-groups/shared-example-group

+0

das ist schon was ich tun möchte, Danke viel vvvvvvvvvery –

Verwandte Themen