代码之家  ›  专栏  ›  技术社区  ›  TrongBang

Ruby如何使用包含模块之外的变量

  •  0
  • TrongBang  · 技术社区  · 7 年前

    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
    

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

    现在的问题是,当它运行时,它抱怨var1和var2没有定义。

    1 回复  |  直到 7 年前
        1
  •  1
  •   max Mike Williams    7 年前

    我相信你在找RSpec的 shared examples :

    # 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
    
    推荐文章