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 (Facebook :: Currency). ... '? – Ninigi

+0

нет ... Я не знаю об этом .. Как это использовать? – RajSharma

ответ

0

Вы на самом деле не хотят Facebook::Currency получить сообщение смещения, но его экземпляры :)

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

Я пробовал это, но получаю выражение выражения void value. – RajSharma

+0

Извините, не пробовал перед отправкой ... попробуйте приведенный выше код с 'and_return' вместо' and return' (отредактирован) – Ninigi

+0

Спасибо, что он сработал ..... Еще раз спасибо. – RajSharma