【发布时间】:2020-03-10 15:50:40
【问题描述】:
Jest 使用 describe 和 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'));
});
类似
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'));
});
所以它是一个自包含的js文件,可以只使用节点运行。
jest 提供的全局变量的完整列表在here 中给出。
【问题讨论】:
-
Jest 使用了一些魔法来简化测试。它取代了标准的 nodejs 模块解析,因此它可以支持具有复杂 webpack 设置的项目,并支持转译。它还对少数全局对象的原型进行修补,这是有争议的。即使你管理了你想要的,你很可能至少绕过了 jest 替换 nodejs 模块的解决方案。这将导致与标准笑话测试不同的行为。
-
出于好奇,除了您没有使用
jest cli运行测试之外,您的第一个和第二个示例之间有什么区别?无论哪种方式,您都必须安装jest,因此如果您将jest cli排除在外,这并不是说您没有安装额外的依赖项。 -
我想了解 jest 使用其原始全局函数所做的“魔法”。一种方法是看看在不使用
jest cli的情况下复制有多容易,这就是这个问题。 -
一个实际用途可能是您不能像“破解”常规 js 一样“破解” jest js 文件(例如,使用测试框架本身改进或自定义某些功能)文件(例如,我可以将 jest 的
it函数包装在我自己的it函数中,该函数运行一些自定义代码(例如,将测试名称记录到文件中,将测试函数包装在另一个函数中),然后调用 jest 的it函数) -
听起来你在问同样的问题。你看过
jest.runCLI吗? stackoverflow.com/questions/50827216/…
标签: javascript node.js jasmine jestjs