2017-04-14 20 views
5

मैं एक नई परियोजना शुरू कर रहा हूं, मेरा पहला रेल 5.1.0 के साथ है। मेरे पास मेरे पहले अनुरोध spec के साथ एक पीबी है।रुपये अनुरोध अनुरोध चश्मा और रेल 5

describe 'Users', type: :request do 
    it 'are created from external data' do 
    json_string = File.read('path/to/test_data/user_data.json') 
    params = { user: JSON.parse(json_string) } 
    headers = { "CONTENT_TYPE" => "application/json" } 

    expect do 
     post '/api/v1/users', params.to_s, headers 
    end.to change { 
     User.count 
    }.by(1) 

    expect(response.status).to eq 200 
    end 
end 

यह spec त्रुटि ArgumentError: wrong number of arguments (given 3, expected 1) त्रुटि देता है। official documentation ज्यादा मत कहो।

अगर मैं .to_s बाहर ले, और एक हैश भेजने के लिए, इस तरह:

ArgumentError: unknown keyword: user 

किसी भी सोचा:

post '/api/v1/users', params, headers 

मैं एक त्रुटि मिली?

+0

आप सही हैं :) मुझे लगता है कि उनका दस्तावेज पुराना है ... क्या आप जवाब फ़ील्ड में पेस्ट कॉपी कर सकते हैं, तो मैं इसे स्वीकार कर सकता हूं? – Ruff9

उत्तर

10

मुझे लगता है कि उन्होंने हाल ही में वाक्यविन्यास बदल दिया है। अब यह कीवर्ड तर्क का उपयोग करना चाहिए। तो, कुछ इस तरह:

post '/api/v1/users', params: params, headers: headers 
+0

रेलवे 4.2 से 5.1 तक मेरे आवेदन को अपग्रेड करते समय मैंने बस इस समस्या में खुद को ठोकर खाई। मुझे लगता है कि परिवर्तन रुपयेपीईसी में अनियंत्रित है क्योंकि यह सिर्फ रेल सहायक के लिए प्रतिनिधि है, लेकिन मेरा सवाल यह है: क्या चश्मे को नए प्रारूप में अपग्रेड करने का एक इष्टतम तरीका है, या बिना किसी बंदर के बंदरगाह के बिना पुराने का उपयोग करें? मेरे पास> 900 चश्मे हैं, जिनमें से ~ 150 इस समस्या के लिए असफल रहे हैं और अन्य कारणों से ~ 150 अधिक हैं, और मैं उन्हें "वास्तविक" समस्याओं को स्पॉट और ठीक करने के लिए जितना संभव हो सके उन्हें बदलना चाहता हूं। – wiz

+0

@ विज़: अच्छा सवाल। मुझे इस तरह के बारे में पता नहीं है। अब तक मैं प्रत्येक घटना को मैन्युअल रूप से बदल रहा हूं। –

+0

इसके लायक होने के लिए, मैंने 'पोस्ट विधि' को 'एक्शनडिस्चैच :: एकीकरण :: सत्र # प्रक्रिया' पर वापस पाया, मुझे लगता है कि रेल 4 और 5 के बीच क्या बदला गया था। मैं नहीं कह सकता कि मैं रेल से परिचित हूं आंतरिक, लेकिन शायद कुछ बिंदु पर परिवर्तन दस्तावेज किया गया था? – wiz

5

यहाँ Sergio's answer एक छोटे से परिशिष्ट है। यदि आप रेल 4 से रेल 5 तक अपग्रेड कर रहे हैं, तो बहुत सारे परीक्षणों के हैं, और आप सभी को बदलने पर बहुत उत्सुक नहीं हैं - कम से कम तब तक जब तक आप अपग्रेडिंग समाप्त नहीं कर लेते - मुझे उन्हें काम करने का एक तरीका मिला है पुरानी विधि हस्ताक्षर।

मेरी spec_helper में मैं

module FixLegacyTestRequests 
    def get(path, par = {}, hdr = {}) 
    process(:get, path, params: par, headers: hdr) 
    end 
    def post(path, par = {}, hdr = {}) 
    process(:post, path, params: par, headers: hdr) 
    end 
    def put(path, par = {}, hdr = {}) 
    process(:put, path, params: par, headers: hdr) 
    end 
    def delete(path, par = {}, hdr = {}) 
    process(:delete, path, params: par, headers: hdr) 
    end 
end 

जोड़ा गया है और फिर मैं प्रत्येक परीक्षा के लिए इस विन्यास कहा:

RSpec.configure do |config| 
    config.before :each do |example| 
    extend(FixLegacyTestRequests) # to be removed at some point! 
    end 
end 

मेरे परीक्षण काम करने के लिए वापस चला गया, और मुझे लगता है कि यह केवल इसलिए है क्योंकि सुरक्षित होना चाहिए वर्तमान में चल रहे परीक्षण पर लागू होता है और किसी भी मणि के कोड जैसे कि बंदर पैच को प्रदूषित नहीं करना चाहिए।

संबंधित मुद्दे