Pee*_*aha 3 javascript node.js jasmine jestjs
Jest 使用describeand ,it而expect无需您使用require它们。这没关系,因为如果您有一个名为 的测试文件test.spec.js,您将永远不会通过发出命令来直接执行它node test.spec.js。
我想使用node作为标准js文件来执行它,而不必使用jest的cli或npm test. 可以这样做吗?
例如,我将转换以下文件:
// taken from documentation
const user = require('./users.js')
it('works with promises', () => {
expect.assertions(1);
return user.getUserName(4).then(data => expect(data).toEqual('Mark'));
});
Run Code Online (Sandbox Code Playgroud)
对于类似的东西
var {describe, it, expect} = require('jest-primitives')
const user = require('./users.js')
it('works with promises', () => {
expect.assertions(1);
return user.getUserName(4).then(data => expect(data).toEqual('Mark'));
});
Run Code Online (Sandbox Code Playgroud)
所以它是一个独立的js文件,可以仅使用node.js来运行。
这里给出了 jest 提供的全局变量的完整列表。
技术上可行吗?是的。
你应该?可能不会。(但还有更好的方法 - tl;dr 使用tape)
Jest 是一个测试工具。
Jest 并不是唯一使用describe()和 的测试工具it()。这些是行为驱动开发(BDD)的典型测试关键字。您还会发现它们与Mocha等一起使用。
describe()和it()是与测试工具交互的函数,分别告诉它添加测试套件和测试用例。然后,测试工具运行测试用例、收集结果、格式化结果并输出它们。
一般来说,您应该尽可能地惯用技术。这使得其他人更容易阅读、理解和使用您的技术。
特别是,以这种方式使用 Jest 将会是自我实现的、hacky 的、有 bug 的,并且对于任何不熟悉你的代码的人来说通常是难以理解的。话虽如此,这应该是可能的。
Jest在其 Jest monorepo 中定义了运行程序包。一个是马戏团,另一个是茉莉花2。
Circus Export和其他一些关键字describe(),it()尽管这些对我们来说并不是真正有用,因为这些函数仅在内部创建测试套件和测试用例,但不会将它们公开给我们或为我们提供运行它们的方法。
Jasmine2导出 一个可执行函数,该函数返回测试结果的 Promise。jasmineAsyncInstall 的代码在环境或全局中创建了大部分关键字,您也许可以使用这些关键字。
您想要在这里做的是定义it()和describe()功能,或者全局地作为导出(如果您想像问题中的代码示例一样使用它们),或者通过在主模块的范围内定义它们来粗暴地使用它们。这些函数应该注册测试用例和测试套件。您需要跟踪测试用例并稍后运行它们,或者立即运行它们并跟踪测试结果。
现在的问题在于确定测试模块何时完成运行。也就是说,当所有 和describe()都已it()执行(无论测试用例本身是否已执行)以及任何其他事件代码(不在任何块中的代码)时。没有好的方法来处理这个问题,这可能会再次变得棘手。最简单的方法可能是添加一个监听器process.on('exit'。
测试工具通常只是一个测试运行者和一个报告者。特别是 Jest,它只是组件的集合,所有组件都是可配置的。
如果我们只是从 Jest 中提取一个函数和一个变量,我们真的可以说我们仍在使用它吗?为什么我们想要这样做?确实没有理由在这里使用 Jest。如果您不喜欢它运行测试的方式,您应该使用不同的测试工具而不是尝试修改它。如果您喜欢reporter,Jest会导出一个仅包含reporter 的包。
使用水龙头或胶带。它们被设计为按照您想要的方式运行,并且是可配置的。
例子:
const test = require('tape');
const MyClass = require('../src/my-class');
test('MyClass.doSometing should be true', (t) => {
const result = MyClass.doSomething();
if (result === true) {
t.pass('The test passed! Hooray! Our class MyClass is seemingly error-free!');
} else {
t.fail('Oh noes. Our test has failed. Why am I such a bad programmer....?');
}
t.end();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2082 次 |
| 最近记录: |