繁体   English   中英

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

[英]Ruby how to use variables outside of included modules

我正在尝试将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

这就是calculation.rb的样子。

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

现在的问题是,它在运行时会抱怨var1和var2未定义。

我相信您正在寻找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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM