انتقل إلى المحتوى الرئيسي

محاكاة

قم بمحاكاة استجابة طلب. يمكنك تحديد محاكاة استنادًا إلى نمط URL متطابق URLPattern والرأس ورمز الحالة المقابلين. استدعاء طريقة المحاكاة يعيد كائن stub يمكنك استخدامه لتعديل استجابة مورد الويب.

باستخدام كائن stub، يمكنك بعد ذلك إما إرجاع استجابة مخصصة أو جعل الطلب يفشل.

هناك 3 طرق لتعديل الاستجابة:

  • إرجاع كائن JSON مخصص (لمحاكاة طلب API)
  • استبدال مورد الويب بملف محلي (تقديم ملف JavaScript معدّل) أو
  • إعادة توجيه المورد إلى عنوان URL مختلف
معلومات

لاحظ أن استخدام أمر mock يتطلب دعمًا لـ WebDriver Bidi. وهذا عادة ما يكون هو الحال عند تشغيل الاختبارات محليًا في متصفح يعتمد على Chromium أو على Firefox وكذلك إذا كنت تستخدم Selenium Grid v4 أو أعلى. إذا كنت تشغل اختبارات في السحابة، تأكد من أن مزود السحابة الخاص بك يدعم 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تصفية المورد حسب بيانات الإرسال في الطلب
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: كائن محاكاة لتعديل الاستجابة

Welcome! How can I help?

WebdriverIO AI Copilot