是否可以 运行 在 Azure 函数中开玩笑 运行 时间?
Is it possible to run Jest in Azure function runtime?
这可能是“您在工作中使用了错误的工具”的情况,但无论如何我都会回答我的问题,因为这是我现在必须处理的问题。
所以,这里是:
我必须制作相对较小的应用程序,这些应用程序会定期 运行 作为 Azure 环境中的功能。这些应用程序执行诸如从 API 获取数据并将该数据存储在 SFTP 服务器上的任务。当我创建这些应用程序时,我将 TDD 方法与 Jest 结合使用。
我想主动应对任何问题,并在功能 运行 安排之前解决它们。如果我 运行 在本地开玩笑,我会注意到这些问题中的任何一个,但我想自动执行此过程。因此,我想知道是否可以从 Azure 功能 运行 这些测试,并在其中一个 运行 失败时让 Azure 警告通知我。
我尝试了什么?
- 已创建新函数文件夹“Jest_Function”
- 在单独的文件中添加了一个总是失败的测试。
/main_functions_folder
/jest_function
- index.js
- function.json
- failingTest.test.js
- 将以下代码添加到 index.js:
const { exec } = require('child_process');
function checkTests() {
return new Promise((resolve, reject) => {
exec('npm run test failingTest.test.js', (error) => {
if (error) reject(error);
else resolve();
});
});
}
module.exports = async function (context) {
try {
await checkTests();
} catch (err) {
context.log('tests failed!');
throw err;
}
};
T运行形成函数并运行在终端中将其整合到预期的行为中:
const { exec } = require('child_process');
function checkTests() {
return new Promise((resolve, reject) => {
exec('npm run test failingTest.test.js', (error) => {
if (error) reject(error);
else resolve();
});
});
}
async function myTest() {
try {
await checkTests();
} catch (err) {
console.log('tests failed!');
throw err;
}
}
myTest();
tests failed!
node:child_process:399
ex = new Error('Command failed: ' + cmd + '\n' + stderr);
^
Error: Command failed: npm run test failingTest.test.js
FAIL jest_function/failingTest.test.js
✕ short test (3 ms)
● short test
expect(received).toBe(expected) // Object.is equality
Expected: 1
Received: 0
1 | test('short test', () => {
> 2 | expect(0).toBe(1);
| ^
3 | });
4 |
at Object.<anonymous> (jest_function/failingTest.test.js:2:13)
Test Suites: 1 failed, 1 total
Tests: 1 failed, 1 total
Snapshots: 0 total
Time: 0.227 s, estimated 1 s
Ran all test suites matching /failingTest.test.js/i.
at ChildProcess.exithandler (node:child_process:399:12)
at ChildProcess.emit (node:events:520:28)
at maybeClose (node:internal/child_process:1092:16)
at Process.ChildProcess._handle.onexit (node:internal/child_process:302:5) {
killed: false,
code: 1,
signal: null,
cmd: 'npm run test failingTest.test.js'
}
蔚蓝
我在 Azure 中部署了该函数并手动 运行 它。这导致了我预期的功能失败,但原因不对。它显示以下错误消息:
Result: Failure Exception: Error: Command failed: npm run test failingTest.test.js sh: 1: jest: Permission denied
我不太确定从这里到哪里去,任何帮助或建议将不胜感激!
不确定您是否可以直接在 Functions 中使用 jest,但我知道您可以 运行 在 Azure Functions 中无头地操纵木偶:
https://anthonychu.ca/post/azure-functions-headless-chromium-puppeteer-playwright/
还有 jest-pupeteer 包,但不确定如果所有 dep 都安装为 运行time dependencies,函数中的 jest 是否有特定限制。
我能够使用 npx 而不是 npm 来完成这项工作:
const { exec } = require('child_process');
function checkTests() {
return new Promise((resolve, reject) => {
exec('npx jest jest_function/failingTest.test.js', (error) => {
if (error) reject(error);
else resolve();
});
});
}
module.exports = async function (context) {
try {
await checkTests();
} catch (err) {
context.log('tests failed!');
throw err;
}
};
查看日志我不太确定“330”到底是什么,但假设它正在安装 jest?
2022-04-19T09:54:06Z [Information] Error: Command failed: npx jest
npx: installed 330 in 32.481s
无论如何,我很高兴我现在可以使用它了:)。
这可能是“您在工作中使用了错误的工具”的情况,但无论如何我都会回答我的问题,因为这是我现在必须处理的问题。
所以,这里是:
我必须制作相对较小的应用程序,这些应用程序会定期 运行 作为 Azure 环境中的功能。这些应用程序执行诸如从 API 获取数据并将该数据存储在 SFTP 服务器上的任务。当我创建这些应用程序时,我将 TDD 方法与 Jest 结合使用。
我想主动应对任何问题,并在功能 运行 安排之前解决它们。如果我 运行 在本地开玩笑,我会注意到这些问题中的任何一个,但我想自动执行此过程。因此,我想知道是否可以从 Azure 功能 运行 这些测试,并在其中一个 运行 失败时让 Azure 警告通知我。
我尝试了什么?
- 已创建新函数文件夹“Jest_Function”
- 在单独的文件中添加了一个总是失败的测试。
/main_functions_folder
/jest_function
- index.js
- function.json
- failingTest.test.js
- 将以下代码添加到 index.js:
const { exec } = require('child_process');
function checkTests() {
return new Promise((resolve, reject) => {
exec('npm run test failingTest.test.js', (error) => {
if (error) reject(error);
else resolve();
});
});
}
module.exports = async function (context) {
try {
await checkTests();
} catch (err) {
context.log('tests failed!');
throw err;
}
};
T运行形成函数并运行在终端中将其整合到预期的行为中:
const { exec } = require('child_process');
function checkTests() {
return new Promise((resolve, reject) => {
exec('npm run test failingTest.test.js', (error) => {
if (error) reject(error);
else resolve();
});
});
}
async function myTest() {
try {
await checkTests();
} catch (err) {
console.log('tests failed!');
throw err;
}
}
myTest();
tests failed!
node:child_process:399
ex = new Error('Command failed: ' + cmd + '\n' + stderr);
^
Error: Command failed: npm run test failingTest.test.js
FAIL jest_function/failingTest.test.js
✕ short test (3 ms)
● short test
expect(received).toBe(expected) // Object.is equality
Expected: 1
Received: 0
1 | test('short test', () => {
> 2 | expect(0).toBe(1);
| ^
3 | });
4 |
at Object.<anonymous> (jest_function/failingTest.test.js:2:13)
Test Suites: 1 failed, 1 total
Tests: 1 failed, 1 total
Snapshots: 0 total
Time: 0.227 s, estimated 1 s
Ran all test suites matching /failingTest.test.js/i.
at ChildProcess.exithandler (node:child_process:399:12)
at ChildProcess.emit (node:events:520:28)
at maybeClose (node:internal/child_process:1092:16)
at Process.ChildProcess._handle.onexit (node:internal/child_process:302:5) {
killed: false,
code: 1,
signal: null,
cmd: 'npm run test failingTest.test.js'
}
蔚蓝
我在 Azure 中部署了该函数并手动 运行 它。这导致了我预期的功能失败,但原因不对。它显示以下错误消息:
Result: Failure Exception: Error: Command failed: npm run test failingTest.test.js sh: 1: jest: Permission denied
我不太确定从这里到哪里去,任何帮助或建议将不胜感激!
不确定您是否可以直接在 Functions 中使用 jest,但我知道您可以 运行 在 Azure Functions 中无头地操纵木偶:
https://anthonychu.ca/post/azure-functions-headless-chromium-puppeteer-playwright/
还有 jest-pupeteer 包,但不确定如果所有 dep 都安装为 运行time dependencies,函数中的 jest 是否有特定限制。
我能够使用 npx 而不是 npm 来完成这项工作:
const { exec } = require('child_process');
function checkTests() {
return new Promise((resolve, reject) => {
exec('npx jest jest_function/failingTest.test.js', (error) => {
if (error) reject(error);
else resolve();
});
});
}
module.exports = async function (context) {
try {
await checkTests();
} catch (err) {
context.log('tests failed!');
throw err;
}
};
查看日志我不太确定“330”到底是什么,但假设它正在安装 jest?
2022-04-19T09:54:06Z [Information] Error: Command failed: npx jest
npx: installed 330 in 32.481s
无论如何,我很高兴我现在可以使用它了:)。