Javascript 在节点js/Mochausing中加载json文件内容需要模块动态传递文件名
我正在使用mocha/node js/cypress工具编写测试脚本,并能够使用以下语句加载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
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