मॉकिंग
जब टेस्ट लिखते हैं तो ऐसा समय आता है जब आपको आंतरिक — या बाहरी — सेवा का एक "नकली" संस्करण बनाने की आवश्यकता होती है। इसे आमतौर पर मॉकिंग कहा जाता है। WebdriverIO आपकी मदद के लिए उपयोगिता फ़ंक्शन प्रदान करता है। आप इसका उपयोग करने के लिए import { fn, spyOn, mock, unmock } from '@wdio/browser-runner' आयात कर सकते हैं। उपलब्ध मॉकिंग उपयोगिताओं के बारे में अधिक जानकारी API डॉक्स में देखें।
फ़ंक्शन्स
अपने कंपोनेंट टेस्ट के हिस्से के रूप में निश्चित फ़ंक्शन हैंडलर्स को कॉल किए जाने की पुष्टि करने के लिए, @wdio/browser-runner मॉड्यूल मॉकिंग प्रिमिटिव्स निर्यात करता है जिन्हें आप यह परीक्षण करने के लिए उपयोग कर सकते हैं कि इन फ़ंक्शन्स को कॉल किया गया है या नहीं। आप इन मेथड्स को निम्न तरीके से आयात कर सकते हैं:
import { fn, spyOn } from '@wdio/browser-runner'
fn को आयात करके आप एक स्पाई फ़ंक्शन (मॉक) बना सकते हैं ताकि उसके निष्पादन को ट्रैक किया जा सके और spyOn के साथ पहले से बनाए गए ऑब्जेक्ट पर मेथड को ट्रैक किया जा सके।
- Mocks
- Spies
पूरा उदाहरण Component Testing Example रिपॉजिटरी में पाया जा सकता है।
import React from 'react'
import { $, expect } from '@wdio/globals'
import { fn } from '@wdio/browser-runner'
import { Key } from 'webdriverio'
import { render } from '@testing-library/react'
import LoginForm from '../components/LoginForm'
describe('LoginForm', () => {
it('should call onLogin handler if username and password was provided', async () => {
const onLogin = fn()
render(<LoginForm onLogin={onLogin} />)
await $('input[name="username"]').setValue('testuser123')
await $('input[name="password"]').setValue('s3cret')
await browser.keys(Key.Enter)
/**
* verify the handler was called
*/
expect(onLogin).toBeCalledTimes(1)
expect(onLogin).toBeCalledWith(expect.equal({
username: 'testuser123',
password: 's3cret'
}))
})
})
पूरा उदाहरण examples डायरेक्टरी में पाया जा सकता है।
import { expect, $ } from '@wdio/globals'
import { spyOn } from '@wdio/browser-runner'
import { html, render } from 'lit'
import { SimpleGreeting } from './components/LitComponent.ts'
const getQuestionFn = spyOn(SimpleGreeting.prototype, 'getQuestion')
describe('Lit Component testing', () => {
it('should render component', async () => {
render(
html`<simple-greeting name="WebdriverIO" />`,
document.body
)
const innerElem = await $('simple-greeting').$('p')
expect(await innerElem.getText()).toBe('Hello, WebdriverIO! How are you today?')
})
it('should render with mocked component function', async () => {
getQuestionFn.mockReturnValue('Does this work?')
render(
html`<simple-greeting name="WebdriverIO" />`,
document.body
)
const innerElem = await $('simple-greeting').$('p')
expect(await innerElem.getText()).toBe('Hello, WebdriverIO! Does this work?')
})
})
WebdriverIO यहां केवल @vitest/spy को पुनः निर्यात करता है, जो एक हल्का Jest संगत स्पाई कार्यान्वयन है जिसे WebdriverIO के expect मैचर्स के साथ उपयोग किया जा सकता है। आप इन मॉक फ़ंक्शन्स पर अधिक दस्तावेज़ीकरण Vitest प्रोजेक्ट पेज पर पा सकते हैं।
बेशक, आप किसी अन्य स्पाई फ्रेमवर्क, जैसे SinonJS को भी स्थापित और आयात कर सकते हैं, जब तक कि वह ब्राउज़र वातावरण का समर्थन करता है।