Có đang chờ khối python không?

Trong triển khai ở trên, chúng tôi hy vọng mô-đun request.js trả lại một lời hứa. Chúng tôi gọi chuỗi tới then để nhận tên người dùng

Bây giờ hãy tưởng tượng một triển khai của request.js đi vào mạng và lấy một số dữ liệu người dùng

lời yêu cầu. js

const http = require['http'];

export default function request[url] {
return new Promise[resolve => {
// This is an example of an http request, for example to fetch
// user data from an API.
// This module is being mocked in __mocks__/request.js
http.get[{path: url}, response => {
let data = '';
response.on['data', _data => [data += _data]];
response.on['end', [] => resolve[data]];
}];
}];
}

Bởi vì chúng tôi không muốn truy cập mạng trong thử nghiệm của mình, chúng tôi sẽ tạo một bản mô phỏng thủ công cho mô-đun request.js của chúng tôi trong thư mục

const http = require['http'];

export default function request[url] {
return new Promise[resolve => {
// This is an example of an http request, for example to fetch
// user data from an API.
// This module is being mocked in __mocks__/request.js
http.get[{path: url}, response => {
let data = '';
response.on['data', _data => [data += _data]];
response.on['end', [] => resolve[data]];
}];
}];
}
2 [thư mục phân biệt chữ hoa chữ thường,
const http = require['http'];

export default function request[url] {
return new Promise[resolve => {
// This is an example of an http request, for example to fetch
// user data from an API.
// This module is being mocked in __mocks__/request.js
http.get[{path: url}, response => {
let data = '';
response.on['data', _data => [data += _data]];
response.on['end', [] => resolve[data]];
}];
}];
}
3 sẽ không hoạt động]. Nó có thể trông giống như thế này

__mocks__/yêu cầu. js

const users = {
4: {name: 'Mark'},
5: {name: 'Paul'},
};

export default function request[url] {
return new Promise[[resolve, reject] => {
const userID = parseInt[url.substr['/users/'.length], 10];
process.nextTick[[] =>
users[userID]
? resolve[users[userID]]
: reject[{
error: `User with ${userID} not found.`,
}],
];
}];
}

Bây giờ, hãy viết một bài kiểm tra cho chức năng không đồng bộ của chúng tôi

__tests__/kiểm tra người dùng. js

jest.mock['../request'];

import * as user from '../user';

// The assertion for a promise must be returned.
it['works with promises', [] => {
expect.assertions[1];
return user.getUserName[4].then[data => expect[data].toBe['Mark']];
}];

Chúng tôi gọi

const http = require['http'];

export default function request[url] {
return new Promise[resolve => {
// This is an example of an http request, for example to fetch
// user data from an API.
// This module is being mocked in __mocks__/request.js
http.get[{path: url}, response => {
let data = '';
response.on['data', _data => [data += _data]];
response.on['end', [] => resolve[data]];
}];
}];
}
4 để yêu cầu Jest sử dụng bản mô phỏng thủ công của chúng tôi.
const http = require['http'];

export default function request[url] {
return new Promise[resolve => {
// This is an example of an http request, for example to fetch
// user data from an API.
// This module is being mocked in __mocks__/request.js
http.get[{path: url}, response => {
let data = '';
response.on['data', _data => [data += _data]];
response.on['end', [] => resolve[data]];
}];
}];
}
5 hy vọng giá trị trả lại là một Lời hứa sẽ được giải quyết. Bạn có thể xâu chuỗi bao nhiêu Lời hứa tùy thích và gọi
const http = require['http'];

export default function request[url] {
return new Promise[resolve => {
// This is an example of an http request, for example to fetch
// user data from an API.
// This module is being mocked in __mocks__/request.js
http.get[{path: url}, response => {
let data = '';
response.on['data', _data => [data += _data]];
response.on['end', [] => resolve[data]];
}];
}];
}
6 bất cứ lúc nào, miễn là bạn trả lại một Lời hứa vào cuối

const http = require['http'];

export default function request[url] {
return new Promise[resolve => {
// This is an example of an http request, for example to fetch
// user data from an API.
// This module is being mocked in __mocks__/request.js
http.get[{path: url}, response => {
let data = '';
response.on['data', _data => [data += _data]];
response.on['end', [] => resolve[data]];
}];
}];
}
7

Có một cách ít dài dòng hơn bằng cách sử dụng

const http = require['http'];

export default function request[url] {
return new Promise[resolve => {
// This is an example of an http request, for example to fetch
// user data from an API.
// This module is being mocked in __mocks__/request.js
http.get[{path: url}, response => {
let data = '';
response.on['data', _data => [data += _data]];
response.on['end', [] => resolve[data]];
}];
}];
}
8 để mở khóa giá trị của một lời hứa đã thực hiện cùng với bất kỳ công cụ đối sánh nào khác. Nếu lời hứa bị từ chối, xác nhận sẽ thất bại

it['works with resolves', [] => {
expect.assertions[1];
return expect[user.getUserName[5]].resolves.toBe['Paul'];
}];

const http = require['http'];

export default function request[url] {
return new Promise[resolve => {
// This is an example of an http request, for example to fetch
// user data from an API.
// This module is being mocked in __mocks__/request.js
http.get[{path: url}, response => {
let data = '';
response.on['data', _data => [data += _data]];
response.on['end', [] => resolve[data]];
}];
}];
}
9/______3_______0

Cũng có thể kiểm tra viết sử dụng cú pháp

const http = require['http'];

export default function request[url] {
return new Promise[resolve => {
// This is an example of an http request, for example to fetch
// user data from an API.
// This module is being mocked in __mocks__/request.js
http.get[{path: url}, response => {
let data = '';
response.on['data', _data => [data += _data]];
response.on['end', [] => resolve[data]];
}];
}];
}
9/
const users = {
4: {name: 'Mark'},
5: {name: 'Paul'},
};

export default function request[url] {
return new Promise[[resolve, reject] => {
const userID = parseInt[url.substr['/users/'.length], 10];
process.nextTick[[] =>
users[userID]
? resolve[users[userID]]
: reject[{
error: `User with ${userID} not found.`,
}],
];
}];
}
0. Đây là cách bạn viết các ví dụ tương tự từ trước

// async/await can be used.
it['works with async/await', async [] => {
expect.assertions[1];
const data = await user.getUserName[4];
expect[data].toBe['Mark'];
}];

// async/await can also be used with `.resolves`.
it['works with async/await and resolves', async [] => {
expect.assertions[1];
await expect[user.getUserName[5]].resolves.toBe['Paul'];
}];

Để bật async/await trong dự án của bạn, hãy cài đặt

const users = {
4: {name: 'Mark'},
5: {name: 'Paul'},
};

export default function request[url] {
return new Promise[[resolve, reject] => {
const userID = parseInt[url.substr['/users/'.length], 10];
process.nextTick[[] =>
users[userID]
? resolve[users[userID]]
: reject[{
error: `User with ${userID} not found.`,
}],
];
}];
}
3 và bật tính năng này trong tệp
const users = {
4: {name: 'Mark'},
5: {name: 'Paul'},
};

export default function request[url] {
return new Promise[[resolve, reject] => {
const userID = parseInt[url.substr['/users/'.length], 10];
process.nextTick[[] =>
users[userID]
? resolve[users[userID]]
: reject[{
error: `User with ${userID} not found.`,
}],
];
}];
}
4 của bạn

xử lý lỗi

Lỗi có thể được xử lý bằng phương pháp

const users = {
4: {name: 'Mark'},
5: {name: 'Paul'},
};

export default function request[url] {
return new Promise[[resolve, reject] => {
const userID = parseInt[url.substr['/users/'.length], 10];
process.nextTick[[] =>
users[userID]
? resolve[users[userID]]
: reject[{
error: `User with ${userID} not found.`,
}],
];
}];
}
5. Đảm bảo thêm
const users = {
4: {name: 'Mark'},
5: {name: 'Paul'},
};

export default function request[url] {
return new Promise[[resolve, reject] => {
const userID = parseInt[url.substr['/users/'.length], 10];
process.nextTick[[] =>
users[userID]
? resolve[users[userID]]
: reject[{
error: `User with ${userID} not found.`,
}],
];
}];
}
6 để xác minh rằng một số xác nhận nhất định được gọi. Mặt khác, một lời hứa được thực hiện sẽ không thất bại trong bài kiểm tra

// Testing for async errors using Promise.catch.
it['tests error with promises', [] => {
expect.assertions[1];
return user.getUserName[2].catch[e =>
expect[e].toEqual[{
error: 'User with 2 not found.',
}],
];
}];

// Or using async/await.
it['tests error with async/await', async [] => {
expect.assertions[1];
try {
await user.getUserName[1];
} catch [e] {
expect[e].toEqual[{
error: 'User with 1 not found.',
}];
}
}];

const users = {
4: {name: 'Mark'},
5: {name: 'Paul'},
};

export default function request[url] {
return new Promise[[resolve, reject] => {
const userID = parseInt[url.substr['/users/'.length], 10];
process.nextTick[[] =>
users[userID]
? resolve[users[userID]]
: reject[{
error: `User with ${userID} not found.`,
}],
];
}];
}
7

Trình trợ giúp ______3_______7 hoạt động giống như trình trợ giúp ______0_______7. Nếu lời hứa được thực hiện, bài kiểm tra sẽ tự động thất bại.

jest.mock['../request'];

import * as user from '../user';

// The assertion for a promise must be returned.
it['works with promises', [] => {
expect.assertions[1];
return user.getUserName[4].then[data => expect[data].toBe['Mark']];
}];
0 không bắt buộc nhưng nên xác minh rằng một số lượng nhất định được gọi trong quá trình kiểm tra. Mặt khác, rất dễ quên
jest.mock['../request'];

import * as user from '../user';

// The assertion for a promise must be returned.
it['works with promises', [] => {
expect.assertions[1];
return user.getUserName[4].then[data => expect[data].toBe['Mark']];
}];
1/
const users = {
4: {name: 'Mark'},
5: {name: 'Paul'},
};

export default function request[url] {
return new Promise[[resolve, reject] => {
const userID = parseInt[url.substr['/users/'.length], 10];
process.nextTick[[] =>
users[userID]
? resolve[users[userID]]
: reject[{
error: `User with ${userID} not found.`,
}],
];
}];
}
0 các khẳng định của
const http = require['http'];

export default function request[url] {
return new Promise[resolve => {
// This is an example of an http request, for example to fetch
// user data from an API.
// This module is being mocked in __mocks__/request.js
http.get[{path: url}, response => {
let data = '';
response.on['data', _data => [data += _data]];
response.on['end', [] => resolve[data]];
}];
}];
}
7

Chủ Đề