我是RPSEC的新手。如何使用RSPEC模拟偏移量方法?
我有一个名为_apply_offset
的方法。它的内容如下 -
def _apply_offset(campaign_params)
if campaign_params['adsets'].length <= 0
return campaign_params
end
## offset
offset = Facebook::Currency.new(current_advertiser).offset
puts "offset = "+offset.to_s
campaign_params['adsets'].each do |adset|
# lifetime_budget,daily_budget
if adset['budget']['value']
adset['budget']['value'] = (adset['budget']['value'] * offset).round
end
next if(adset['bid']['method'] == 'OCPM')
if adset['bid']['value']
adset['bid']['value'] = (adset['bid']['value'] * offset).round
end
end
return campaign_params
末 正如你可以在上面的代码中看到我打电话Facebook::Currency.new(current_advertiser).offset
我想这个函数的值返回100
偏移功能看起来像这样 -
def offset
currency = M_FACEBOOK_CURRENCIES['JPY']
currency = M_FACEBOOK_CURRENCIES[@facebook_information.currency] unless @facebook_information.currency.nil?
return currency[:offset]
end
我的RSPEC代码看起来像如下─
describe "#_apply_offset" do
let(:current_user) { User.find(10) }
let(:current_advertiser) { Advertiser.find(4) }
let(:campaign_params) {
{
'adsets' => []
}
}
before do
allow(controller).to receive(:current_user).and_return(current_user)
allow(controller).to receive(:current_advertiser).and_return(current_advertiser)
end
subject { controller.send(:_apply_offset, campaign_params) }
context "CPC/CPM params" do
let(:campaign_params) {
{
'adsets' => [
{
'budget' => {
'value' => 1000
},
'bid' => {
'value' => 1000
}
},
]
}
}
describe "budget value" do
it "offset budget value and round" do
expect(subject['adsets'][0]['budget']['value']).to eq(1000)
end
end
describe "bid value" do
it "offset bid value and round" do
expect(subject['adsets'][0]['bid']['value']).to eq(1000)
end
end
end
context "OCPM params" do
let(:campaign_params) {
{
'adsets' => [
{
'budget' => {
'value' => 1000
},
'bid' => {
'method' => 'OCPM',
'value' => ''
}
},
]
}
}
describe "method = OCPM" do
it "expects round method doesn't execute" do
expect(subject['adsets'][0]['bid']['value']).to eq('')
end
end
end
末
在前面的勾我试图allow(Facebook::Currency).to receive(:offset).and return)(100)
,但它不工作。
你尝试'allow_any_instance_of(脸谱::货币)。 ...'? – Ninigi
不...我不知道这个..怎么用这个? – RajSharma