ruby-on-rails - Ruby如何在包含的模块之外使用变量
问题描述
我正在尝试将 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
推荐阅读
- python - 使用python获取json对象值
- python-3.x - 尝试使用 Gensim 运行 Mallet 时出现 subprocess.CalledProcessError
- c# - 如何使用c#将动态查询插入表中
- php - 如何同时删除括号和括号内的文本以及之前的任何空格(如果存在)?
- c# - 如果 ON HEAP 和 OFF HEAP Memory full APACHE IGNITE 将条目逐出到磁盘
- excel - 如何修复在 excel vba 中发送的“Next with no For”错误
- sql - sql:比较具有不同值的两个表会产生重复的结果
- c++ - C++ 中的定期线程创建
- selenium - selenium element.click() 不工作(不点击)
- html - 如何使用css在所有方向上旋转图像