2016-04-26 7 views
0

Ich lerne Ruby/Rails und beginne damit, die Code-Basis meiner Arbeit zu verstehen und zu einem Test hinzuzufügen. Ich habe Probleme zu verstehen, wie ein gemeinsames Beispiel eingerichtet wird. In einem beschreibenden Block, der verschiedene Kontexte hat, möchte ich in einem Kontext arbeiten und zwei verschachtelte Kontexte darin einfügen, die eine Variable in ihrem äußeren Kontext ändern.Wie verschachtelt man Kontext in einem Kontext (bereits in einem anderen Kontext), um ein gemeinsames Beispiel in einem gemeinsamen Beispiel für einen RSpec-Test zu machen?

Im Code unter dem context 'and the attachment is a zipfile' do der Kontext des Blocks beschreiben Ich möchte arbeiten. Ich möchte von zwei verschiedenen Kontexten für 'application/x-zip-compressed' und 'application/octet-stream' die Variable contentType ändern.

Kann ich die zwei inner-inneren Kontexte einrichten, um die Variable contentType mit let(:contentType) zu ändern, oder funktioniert das nicht, weil es ein Symbol ist, das ich als Konstante verstehe, das sich nicht ändern kann?

Ursprünglich hat dies nur die type von "file1" Hash auf "applicatoin/x-zip-compressed" gesetzt. Ich erkunde eine Möglichkeit, ein gemeinsames Beispiel zu verwenden, mache den Typ zu einer Variablen, die ich je nach Kontext ändern kann.

+0

ja, können Sie Setup-Variablen definiert let innerhalb verschiedener Kontext verschiedene Verhalten zu bekommen. –

Antwort

0

Ja, Sie können Variablen definiert mit in verschiedenen Kontext lassen, um verschiedene Verhalten zu erhalten. Aber Sie sollten diese Definitionen an den Ort, an dem die Variable verwendet wird, umgebende Kontextblöcke enthalten. Aber, es zu benutzen it Klauseln Muss innerhalb der variablen definer Kontext erklärt werden:

describe 'the attachment is zipfile' do 
    let(:encoded) { true } 
    let(:data) { File.read(Rails.root + 'spec/fixtures/test_files/test.zip') } 
    let(:expected_status) { 'new' } 
    let(:attachments){{ 
    "file1" => { 
     name: "test.zip", 
     type: contentType, 
     content: payload, 
     base64: encoded 
    } 
    }} 
    context 'and the attachment type is zip' do 
    let(:contentType) { 'application/x-zip-compressed' } 

    it { $ request with compressed } 
    end 

    context 'and the attachment type is octet-stream' do 
    let(:contentType) { 'application/octet-stream' } 

    it { # request with octet } 
    end 
end 
Verwandte Themen