javascript - 在 Node js/Mochausing require 模块动态传递文件名中加载 json 文件内容

标签 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/JsonData/'+filename);

我在 Cypress 控制台中看到的错误是:

Uncaught Error: Cannot find module '../../fixtures/TestData/JsonData/ABC_DEF.json'

任何意见都将受到高度赞赏。

注意:目的是读取文件名为动态变量的文件内容,并使用其值构造测试名称 - it()动态地。因此文件必须在描述 block 内读取,因为它优先于 before()it() block 。因此,cy无法使用命令,因为它们不在测试之外运行,并且 fs不能使用,因为它们仅在 Node 上下文中运行,这又只能通过 cy.task 来实现

最佳答案

我会向 readFileSync 添加编码,如下所示:

var fs = require('fs');
var data = fs.readFileSync('../../fixtures/TestData/JsonData/ABC_DEF.json', {encoding: 'utf-8'});
console.log(data);

如果您想要一个字符串而不是Buffer。如果您希望它成为一个对象,您可以使用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 }

关于javascript - 在 Node js/Mochausing require 模块动态传递文件名中加载 json 文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54316733/

相关文章:

node.js - “中止”读取 cassandra 结果

Node.js 向 GCM 服务器发送消息

node.js - 无法访问aws上的nodejs服务器

javascript - 如何使用 Protractor 处理具有相同中继器的两个表

javascript - 在 nvd3 结构中使用 d3 和 json 的多折线图

javascript - 使用nodejs添加对象数组并在file.txt上读取它

node.js - Passport.js 和 Restify 的 session 问题

javascript - 如何使用java脚本或jquery从php选择项获取值,其中选择项值来自查询mysql

javascript - 使用 jQuery 单击关闭输入区域功能

node.js - 从 Node.js C++ 模块导出整数值