单元测试 Hapi 服务器方法
Unit testing Hapi Server Methods
我有一个应用程序大量使用了 Hapi 的 Server Methods。这些方法是通过导出的 register
函数应用的,并且为该方法执行的代码位于同一文件中,因此不会导出。我正在尝试为这些方法编写测试,而不以最简单的方式导出它们调用的函数,但我还没有找到如何这样做的任何示例。
export function register(server) {
server.method(
'methodNameA',
async (path, {}) => {
// Some code here
return something; // I want to test this result
},
{
cache: methodCache.halfDay,
generateKey(path, { ... } = {}) {
return something;
},
}
);
};
抽象该逻辑是一种选择,但我宁愿不公开它只是为了测试。我也不想为了验证这一点逻辑而测试整条路线(尽管这可能是这里的最终解决方案)。
我将使用 jestjs 作为我的单元测试框架。您可以为 server.method()
提供模拟服务器和模拟实现。然后你就可以在你的测试用例中得到原来的方法了。
得到原方法后,照常测试
例如
register.ts
:
export function register(server) {
server.method('methodNameA', async () => {
return 'something';
});
}
register.test.ts
:
import { register } from './register';
describe('67093784', () => {
it('should pass', async () => {
let methodNameA;
const mServer = {
method: function mockImplementation(m, func) {
methodNameA = func;
},
};
register(mServer);
// test method
const actual = await methodNameA();
expect(actual).toEqual('something');
});
});
单元测试结果:
PASS examples/67093784/register.test.ts (11.981 s)
67093784
✓ should pass (3 ms)
-------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-------------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
register.ts | 100 | 100 | 100 | 100 |
-------------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 14.766 s
我有一个应用程序大量使用了 Hapi 的 Server Methods。这些方法是通过导出的 register
函数应用的,并且为该方法执行的代码位于同一文件中,因此不会导出。我正在尝试为这些方法编写测试,而不以最简单的方式导出它们调用的函数,但我还没有找到如何这样做的任何示例。
export function register(server) {
server.method(
'methodNameA',
async (path, {}) => {
// Some code here
return something; // I want to test this result
},
{
cache: methodCache.halfDay,
generateKey(path, { ... } = {}) {
return something;
},
}
);
};
抽象该逻辑是一种选择,但我宁愿不公开它只是为了测试。我也不想为了验证这一点逻辑而测试整条路线(尽管这可能是这里的最终解决方案)。
我将使用 jestjs 作为我的单元测试框架。您可以为 server.method()
提供模拟服务器和模拟实现。然后你就可以在你的测试用例中得到原来的方法了。
得到原方法后,照常测试
例如
register.ts
:
export function register(server) {
server.method('methodNameA', async () => {
return 'something';
});
}
register.test.ts
:
import { register } from './register';
describe('67093784', () => {
it('should pass', async () => {
let methodNameA;
const mServer = {
method: function mockImplementation(m, func) {
methodNameA = func;
},
};
register(mServer);
// test method
const actual = await methodNameA();
expect(actual).toEqual('something');
});
});
单元测试结果:
PASS examples/67093784/register.test.ts (11.981 s)
67093784
✓ should pass (3 ms)
-------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
-------------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
register.ts | 100 | 100 | 100 | 100 |
-------------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 14.766 s