我正在使用 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/