2016-05-04 3 views
1

Dies ist die Ausgabe des Bündels exec Gurkenlauf. Sie können sehen, dass die @timeout_exception während des Gurkenlaufs gleich Null ist, aber zur Laufzeit gut eingestellt ist.Leere Variablen in Gherkins-Tests

And the output should be 'Execution Timeout Error: This deployment has taken too long to run'          # features/step_definitions/my_steps.rb:309 

    expected: "Execution Timeout Error: This deployment has taken too long to run" 
     got: nil 

    (compared using ==) 
    (RSpec::Expectations::ExpectationNotMetError) 
    ./features/step_definitions/my_steps.rb:310:in `/^the output should be '(.*)'$/' 
    features/timeout_lengthy_deploys.feature:25:in `And the output should be 'Execution Timeout Error: This deployment has taken too long to run'' 

Failing Scenarios: 
cucumber features/timeout_lengthy_deploys.feature:11 # Scenario: Normal deploy that times out because it takes too long 

Dies ist mein Test, aber obwohl @timeout_exception während des Laufens des Codes arbeitet, ist es während des Tests leer. Wie kann ich testen, ob diese Variable gesetzt ist?

Then(/^the output should be '(.*)'$/) do |expectedException| 
    expect(@timeout_exception).to eq(expectedException) 
end 

Dies ist der Ruby-Code.

log.info "Executing '#{command.join(' ')}'" 
begin 
    timeout(config['deploy-timeout'].to_i) do 
     execute_and_log command 
    end 
rescue Timeout::Error => e 
    @timeout_exception = "Execution Timeout Error" 
    log.error "#{@timeout_exception}" 
    raise e 
end 

Log.error druckt schön "Execution Timeout Error" ist aber während der erwarten (@timeout_exception) leer ...

Antwort

1

Es ist nicht unbedingt leer während des Tests, aber es ist nicht zugänglich im Test. Was Sie testen, ist eine Instanzvariable, die zum Testobjekt gehört, nicht die ursprüngliche Instanzvariable.

Sie nicht sagen, was die Instanzvariable Objekt gehört, aber man kann aus dem Test mit ...

foo.instance_variable_get(:bar) 

die Instanz-Variable abzurufen Aber wenn Sie testen Instanzvariablen, die Test muss zu viel über die Interna Ihrer Bewerbung wissen. Besser wäre es für Sie zu testen, welche Methode die Instanzvariable verwendet/ausgibt.