پرش به محتوای اصلی

شبیه‌سازی

شبیه‌سازی پاسخ یک درخواست. می‌توانید یک شبیه‌سازی را بر اساس تطابق با URLPattern و هدر و کد وضعیت مربوطه تعریف کنید. فراخوانی متد شبیه‌سازی یک شیء stub را برمی‌گرداند که می‌توانید از آن برای اصلاح پاسخ منبع وب استفاده کنید.

با شیء stub می‌توانید پاسخ سفارشی برگردانید یا درخواست را به شکست بیانجانید.

سه روش برای تغییر پاسخ وجود دارد:

  • برگرداندن یک شیء JSON سفارشی (برای شبیه‌سازی درخواست API)
  • جایگزینی منبع وب با یک فایل محلی (ارائه یک فایل JavaScript اصلاح شده) یا
  • هدایت مجدد منبع به یک url متفاوت
اطلاعات

توجه داشته باشید که استفاده از دستور mock نیازمند پشتیبانی از WebDriver Bidi است. این معمولاً زمانی است که آزمون‌ها را به صورت محلی در مرورگر مبتنی بر Chromium یا Firefox اجرا می‌کنید و همچنین اگر از Selenium Grid نسخه 4 یا بالاتر استفاده می‌کنید. اگر آزمون‌ها را در فضای ابری اجرا می‌کنید، مطمئن شوید که ارائه‌دهنده خدمات ابری شما از WebDriver Bidi پشتیبانی می‌کند.

اطلاعات

URLPattern یک فناوری آزمایشی است و هنوز در برخی محیط‌ها، مانند Node.js پشتیبانی نمی‌شود. توصیه می‌کنیم یک polyfill را وارد کنید تا زمانی که این ویژگی به طور گسترده‌تری پشتیبانی شود.

استفاده
browser.mock(url, { method, requestHeaders, responseHeaders, postData, statusCode })
پارامترها
نامنوعجزئیات
urlStringآدرس url برای شبیه‌سازی
filterOptions
اختیاری
MockFilterOptionsفیلتر کردن منبع شبیه‌سازی با گزینه‌های اضافی
filterOptions.method
اختیاری
String, Functionفیلتر کردن منبع بر اساس متد HTTP
filterOptions.requestHeaders
اختیاری
Object, Functionفیلتر کردن منبع بر اساس هدرهای درخواست خاص
filterOptions.responseHeaders
اختیاری
Object, Functionفیلتر کردن منبع بر اساس هدرهای پاسخ خاص
filterOptions.postData
اختیاری
String, Functionفیلتر کردن منبع بر اساس داده‌های post درخواست
filterOptions.statusCode
اختیاری
Number, Functionفیلتر کردن منبع بر اساس کد وضعیت پاسخ
مثال
mock.js
it('should mock network resources', async () => {
// via static string
const userListMock = await browser.mock('**' + '/users/list')
// or as regular expression
const userListMock = await browser.mock(/https:\/\/(domainA|domainB)\.com\/.+/)
// you can also specifying the mock even more by filtering resources
// by request or response headers, status code, postData, e.g. mock only responses with specific
// header set and statusCode
const strictMock = await browser.mock('**', {
// mock all json responses
statusCode: 200,
requestHeaders: { 'Content-Type': 'application/json' },
responseHeaders: { 'Cache-Control': 'no-cache' },
postData: 'foobar'
})

// comparator function
const apiV1Mock = await browser.mock('**' + '/api/v1', {
statusCode: (statusCode) => statusCode >= 200 && statusCode <= 203,
requestHeaders: (headers) => headers['Authorization'] && headers['Authorization'].startsWith('Bearer '),
responseHeaders: (headers) => headers['Impersonation'],
postData: (data) => typeof data === 'string' && data.includes('foo')
})
})

it('should modify API responses', async () => {
// filter by method
const todoMock = await browser.mock('**' + '/todos', {
method: 'get'
})

// mock an endpoint with a fixed fixture
todoMock.respond([{
title: 'Injected Todo',
order: null,
completed: false,
url: "http://todo-backend-express-knex.herokuapp.com/916"
}])

// respond with different status code or header
todoMock.respond([{
title: 'Injected Todo',
order: null,
completed: false,
url: "http://todo-backend-express-knex.herokuapp.com/916"
}], {
statusCode: 404,
headers: {
'x-custom-header': 'foobar'
}
})
})

it('should modify text assets', async () => {
const scriptMock = await browser.mock('**' + '/script.min.js')
scriptMock.respond('./tests/fixtures/script.js')
})

it('should redirect web resources', async () => {
const headerMock = await browser.mock('**' + '/header.png')
headerMock.respond('https://media.giphy.com/media/F9hQLAVhWnL56/giphy.gif')

const pageMock = await browser.mock('https://google.com/')
pageMock.respond('https://webdriver.io')
await browser.url('https://google.com')
console.log(await browser.getTitle()) // returns "WebdriverIO · Next-gen browser and mobile automation test framework for Node.js"
})
مقادیر بازگشتی
  • <Mock> return: یک شیء mock برای اصلاح پاسخ

Welcome! How can I help?

WebdriverIO AI Copilot