0

我是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),但它不工作。

+0

你尝试'allow_any_instance_of(脸谱::货币)。 ...'? – Ninigi

+0

不...我不知道这个..怎么用这个? – RajSharma

回答

0

你其实不想Facebook::Currency接收偏移消息,但它的情况下:)

allow_any_instance_of(Facebook::Currency). 
    to receive(:offset).and_return(100) 
+0

我试过这个,但我得到空值表达式的错误。 – RajSharma

+0

抱歉,没有测试发布之前...尝试使用'and_return'而不是'和return'(编辑) – Ninigi

+0

感谢它工作.....再次感谢上述代码。 – RajSharma