Javascript 在节点js/Mochausing中加载json文件内容需要模块动态传递文件名

Javascript 在节点js/Mochausing中加载json文件内容需要模块动态传递文件名,javascript,node.js,Javascript,Node.js,我正在使用mocha/node js/cypress工具编写测试脚本,并能够使用以下语句加载json文件的数据: var data = require('../../fixtures/TestData/JsonData/ABC_DEF.json'); 如果我必须在脚本中动态传递文件名-ABC_DEF.json,如下所示,那么它就不起作用 var filename = 'ABC_DEF.json' var data = require('../../fixtures/TestData/JsonD

我正在使用mocha/node js/cypress工具编写测试脚本,并能够使用以下语句加载json文件的数据:

var data = require('../../fixtures/TestData/JsonData/ABC_DEF.json');
如果我必须在脚本中动态传递文件名-
ABC_DEF.json
,如下所示,那么它就不起作用

var filename = 'ABC_DEF.json'
var data = require('../../fixtures/TestData/JsonData/'+filename);
我在Cypress控制台中看到的错误是:

未捕获错误:找不到模块“../../fixtures/TestData/JsonData/ABC_DEF.json”

非常感谢您的任何意见


注意:目标是读取文件名为动态变量的文件内容,并使用其值动态构造测试名-
it()
。所以文件必须在描述块内读取,因为它优先于
before()
it()
块。因此,
cy
命令不能使用,因为它们不在测试之外运行,
fs
不能使用,因为它们只能在节点上下文中运行,这同样可以通过
cy.task

来实现。
require
命令用于加载node.js模块,而不是从文件读取数据。您可以使用
require
将文件作为对象读取,但这不是标准做法

如果您想从文件中读取数据,请考虑使用<代码> FS模块:

var fs = require('fs');
var data = fs.readFileSync('../../fixtures/TestData/JsonData/ABC_DEF.json', 'utf8');
console.log(data);
编辑:如果使用Cypress:

cy.readFile('../../fixtures/TestData/JsonData/ABC_DEF.json').then((data) => {
    console.log(data);
});

我会在
readFileSync
中添加一个编码,如下所示:

var fs = require('fs');
var data = fs.readFileSync('../../fixtures/TestData/JsonData/ABC_DEF.json', {encoding: 'utf-8'});
console.log(data);
如果您想要字符串而不是
缓冲区
。如果希望它成为
对象
,可以使用
JSON.parse(data)
将其放入对象中

我只是在命令行中这样做的,我有一个
test.json
文件:

> fs.readFileSync('test.json');
<Buffer 7b 0d 0a 09 22 74 65 73 74 22 3a 20 31 0d 0a 7d>
> fs.readFileSync('test.json', {encoding: 'utf-8'})
'{\r\n\t"test": 1\r\n}'
> JSON.parse(fs.readFileSync('test.json', {encoding: 'utf-8'}))
{ test: 1 }
fs.readFileSync('test.json'); >fs.readFileSync('test.json',{encoding:'utf-8'}) “{\r\n\t”测试:1\r\n}” >parse(fs.readFileSync('test.JSON',{encoding:'utf-8'})) {测试:1}
无法通过文件的动态名称读取文件,并使用内容在同一规范文件中动态构造测试名称-it()。解决方法:已将代码拆分为两个不同的等级库文件。第一个文件带有一个it(),使用cy命令按文件名读取文件,并将文件内容保存在磁盘上。第二个文件读取保存的文件内容并使用其值构造测试名称-it()

我不能像在Cypress中那样使用fs模块,我只能使用cy.task使用fs,它应该在it()或before()函数中,这不适合我的情况。我想在调用函数before()之前阅读内容,也就是说,这必须在descripe block中完成。cy.readFile必须在它内部或之前。我想在descripe块中读取该文件,因为它的执行顺序优先于before和block