Ruby, как использовать переменные вне включенных модулей - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь разделить мой код в RSpec на несколько файлов, чтобы он выглядел лучше.Текущий файл выглядит следующим образом.

require 'rails_helper'

RSpec.describe Api::MyController do
   let(:var1) {}
   let(:var2) {}
   it 'should calculate some value' do
      expect(var1 + var2).to eq('some value')
   end
end

Теперь вот так он выглядит после рефакторинга.

require 'rails_helper'
require_relative './mycontroller/calculation'

RSpec.describe Api::MyController do
   let(:var1) {}
   let(:var2) {}
   include Api::MyController::Calculation
end

А вот так выглядит output.rb.

module Api::MyController::Calculation
   it 'should calculate some value' do
      expect(var1 + var2).to eq('some value')
   end
end

Проблема теперь в том, что при запуске он жалуется, что var1 и var2 не определены.

1 Ответ

0 голосов
/ 12 октября 2018

Я полагаю, что вы ищете общие примеры RSpec :

# spec/support/shared_examples/a_calculator.rb
RSpec.shared_examples "a calculator" do
  it 'should calculate some value' do
    expect(x+y).to eq(result)
  end
end

Затем вы включаете общий пример с любым из:

include_examples "name"      # include the examples in the current context
it_behaves_like "name"       # include the examples in a nested context
it_should_behave_like "name" # include the examples in a nested context
matching metadata            # include the examples in the current context

Вы можете передатьконтекст для общего примера, передавая блок:

require 'rails_helper'
require 'support/shared_examples/a_calculator'
RSpec.describe Api::MyController do
  it_should_behave_like "a calculator" do
    let(:x){ 1 }
    let(:y){ 2 } 
    let(:result){ 3 }  
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...