नियंत्रक कोड I का परीक्षण करने के लिए देख रहा है जिसमें ऐसे कार्य शामिल हैं जहाँ क्वेरीज़ पसंद हैं
$this->Model->find("all", [
"joins" => [
"table" => database.table,
"type" => "inner",
"conditions" => ["table.id" => "Model.table_id"]
],
]);
बड़े पैमाने पर उपयोग किया जाता है।
समस्या यह है कि testAction
मॉडल की तालिका को सही ढंग से ढूँढता है test
डेटासोर्स, लेकिन स्पष्ट जुड़ाव को संशोधित नहीं करता है, जो इसे वास्तविक में जोड़ता है database.table
, बजाय test.table
.
मेरा अंतर्ज्ञान मुझे बताता है कि CakePHP का उपयोग करने के बजाय इन प्रश्नों को फिर से लिखना केककेपी की अनुमति देना चाहिए ControllerTestCase
शामिल किए गए मॉडल के डेटा स्रोत को बदलने के लिए test
डेटा स्रोत, समस्या को ठीक करना। हालाँकि, मैं सभी क्वेरी कोड को फिर से लिखना नहीं चाहता।
किसी को भी इस के आसपास काम करने का एक तरीका पता है? यदि नहीं, तो क्या मैं यह सोचने में सही हूं कि समस्या को हल करने के लिए विधि शामिल होगी?
उत्तर:
जवाब के लिए 2 № 1समस्या यह है कि सम्मिलित होने में, "table" => database.table,
हार्ड कोडित है, इसलिए केक क्वेरी को पुनर्निर्देशित नहीं कर सकता है test
डेटा स्रोत (यह दिखेगा) table
में database
)। इसे ठीक करने के लिए, प्रतिस्थापित करें database
में database.test
साथ में $this->Model->getDataSource()->config["database"]
, कहा पे Model
मॉडल को संदर्भित करता है table
का प्रतिनिधित्व करता है (या के लिए एक शामिल होने की मेज है)। परीक्षण के मामलों में, केक मॉडल बदल सकते हैं "डेटा स्रोत test
डेटा स्रोत, इसलिए क्वेरी ठीक से संशोधित की जाएगी।