मैं जेस्ट में एक वस्तु उपहास करने के लिए (जो मेरे द्वारा बनाए गए) तो मैं प्रतिक्रिया घटक (ताकि वास्तविक कार्यान्वयन नहीं किया जाता है)जेस्ट में मैन्युअल रूप से अपनी फ़ाइलों में से एक को कैसे नकल करते हैं?
यह मेरा घटक ChatApp प्रतिक्रिया है के भीतर डिफ़ॉल्ट व्यवहार प्रदान कर सकते हैं कोशिश कर रहा हूँ (यह बहुत है सीधे आगे)
'use strict';
var React, ChatApp, ChatPanel, i18n;
React = require('react');
ChatPanel = require('./chat_panel');
i18n = require('../support/i18n');
ChatApp = React.createClass({
render() {
return (
<div className="chat-app">
<h1>{i18n.t("app.title")}</h1>
<ChatPanel />
</div>
);
}
});
module.exports = ChatApp;
तो मैं एक कस्टम I18n निर्भरता कि अनुवाद करता है (i18n कुछ मैं लिखा है कि नोड बहुभाषी के लिए एक आवरण) है।
तो मैं यह देखने के लिए एक बुनियादी परीक्षण करना चाहता हूं कि एच 1 में सही शब्द है या नहीं, लेकिन मैं अपने I18n ऑब्जेक्ट पर jest.dontMock() सेट नहीं करना चाहता, क्योंकि मैं इसे नहीं चाहता ChatApp परीक्षण में वास्तविक वस्तु का उपयोग करें।
तो हंसी वेबसाइट पर बुनियादी निर्देशों का पालन, मैं बनाया एक फ़ोल्डर मजाक उड़ाता है और जो मूल वस्तु से एक नकली उत्पन्न करता है और उसके बाद टी विधि ओवरराइड करता है और मुझे अनुमति देने के लिए एक विधि कहते हैं i18n के लिए एक नकली फ़ाइल, बनाया टी के लिए रिटर्न स्ट्रिंग सेट करने के लिए।
'use strict';
var React, ChatApp, TestUtils, path;
path = '../../../scripts/components/';
jest.dontMock(path + 'chat_app');
React = require('react/addons');
ChatApp = require(path + 'chat_app');
TestUtils = React.addons.TestUtils;
describe('ChatApp',() => {
beforeEach(() => {
require('i18n').__setReturnString('Chat App');
});
var ChatAppElement = TestUtils.renderIntoDocument(<ChatApp />);
it('renders a title on the page',() => {
var title = TestUtils.findRenderedDOMComponentWithTag(ChatAppElement, 'h1');
expect(title.tagName).toEqual('H1');
expect(title.props.children).toEqual('Chat App');
});
});
तो मैं भीतर i18n वस्तु console.log:
यह नकली वस्तु
'use strict';
var i18nMock, _returnString;
i18nMock = jest.genMockFromModule('../scripts/support/i18n');
_returnString = "";
function __setReturnString(string) {
_returnString = string;
}
function t(key, options = null) {
return _returnString;
}
i18nMock.t.mockImplementation(t);
i18nMock.__setReturnString = __setReturnString;
module.exports = i18nMock;
अब मेरी ChatApp परीक्षण में मैं प्रत्येक से पहले एक में नकली की आवश्यकता होती है, इसलिए की तरह है परीक्षण करें तो मुझे सही मॉक ऑब्जेक्ट मिलता है, __setReturnString भी ट्रिगर हो जाता है (जैसे कि मैं उस संदेश में console.log को लॉग देखता हूं)।
हालांकि, अगर मैं वास्तविक प्रतिक्रिया घटक के भीतर i18n ऑब्जेक्ट को console.log करता हूं तो यह एक जेस्ट मॉक प्राप्त करता है लेकिन इसे मेरा जेस्ट मॉक नहीं मिलता है, इसलिए टी विधि एक खाली विधि है जो कुछ भी नहीं करती है, मतलब परीक्षण विफल रहता है।
कोई विचार क्या मैं गलत कर रहा हूं?
धन्यवाद एक बहुत
हाय, इनपुट के लिए धन्यवाद। हालांकि, मैं नहीं चाहता कि जेस्ट एक स्वचालित नकली प्रदान करे क्योंकि जेस्ट स्वचालित नकली कार्य कुछ भी वापस नहीं करते हैं। जो मेरा परीक्षण विफल कर देगा क्योंकि यह एक स्ट्रिंग का अनुवाद और लौटने की उम्मीद कर रहा है। जेस्ट डॉक्स पर मैन्युअल मॉकिंग मुझे चाहिए जो मुझे चाहिए क्योंकि मैं अपनी ऑब्जेक्ट का एक मॉक संस्करण चाहता हूं जो कि मैं इसे बताता हूं। – TheStoneFox
स्वचालित मॉकिंग के साथ चिपकने और परीक्षण में नकली को कॉन्फ़िगर करने का प्रयास करने के बारे में कैसे? कुछ 'var i18n = आवश्यकता है (' i18n '); i18n.t.mockReturnValue ('मेरी वापसी स्ट्रिंग') – kraf
हाय, मैंने चीज़ की आवश्यकता और मूल्य को मजाक करने की कोशिश की, लेकिन वास्तविक कार्यान्वयन (ChatApp के अंदर) जब टी कहा जाता है, यह अभी भी अपरिभाषित लौट रहा है, इसलिए नकली नहीं है काम कर रहे। परीक्षण में i18n ऑब्जेक्ट सही ढंग से मजाक किया गया है लेकिन यह iAppn ऑब्जेक्ट ChatApp कोड में उपयोग नहीं किया गया है। – TheStoneFox