RSpec规范伪造类常量的最佳做法或解决方法
比方说,我有汽车和机械师课。 汽车有“跑”的方法。 机械师出于某种原因需要汽车。 然后我写RSpec规格。 在机械师中,我定义了一个假的clas:
class Car; end
并稍后存根据机制使用的方法。 如果我单独运行测试,所有工作正常。 但是当我将两个测试一起运行时(rspec spec / directory /),我的机械规格使用真正的Car类。
所以。 我想这是因为红宝石类是“开放”的,我已经为Car规格加载过一次类。 但有没有更好的方法来做到这一点? 什么是这种情况的最佳实践? 这是否意味着我的代码需要一些改进,因为它可能紧密耦合?
我在github上做了一个快速演示:https://github.com/depy/RspecTest
这个假的类不会工作,因为Ruby Classes是开放的。
你可以使用的一种方法是使用let按照你想要的方式初始化对象,如果需要的话,使用before块的关系。 在前面的街区内,存根也是受欢迎的。 = p
希望这可以帮助你!
我认为你需要的是双层测试:
给定代码如下:
class Car
end
class Mechanic
def fix(car)
# do something here
end
end
对于单元规格,我会存根相关性,例如:
describe Mechanic do
let(:mechanic) { described_class.new }
let(:car) { stub(stubbed_method_on_car: 14) } # Or just OpenStruct.new(stubbed_method_on_car: 14)
it 'does some stuff' do
mechanic.fix(car).should eq true
end
end
对于集成规格,我会这样做:
describe Mechanic do
let(:mechanic) { FactoryGirl.create(:mechanic) }
let(:car) { FactoryGirl.create(:car) }
it 'does some stuff' do
mechanic.fix(car).should eq true
end
end
Rspec已经构建支持存根常量。
链接地址: http://www.djcxy.com/p/66693.html上一篇: Best practice or workaround for RSpec specs faking class constants