【问题标题】:Why fs.readFile is not a function when run tests in karma and jasmine?为什么在 karma 和 jasmine 中运行测试时 fs.readFile 不是函数?
【发布时间】:2018-12-11 09:40:02
【问题描述】:

我有一个必须找到一个文件(.zip)并返回它的函数,我可以将它用作另一个函数的参数。此外,我在 karma/jasmine 中进行了测试,在那里我午餐我的搜索功能,当我这样做时,它会抛出一个错误 'fs.readFile is not a function'
测试代码:

const fs = require('fs');
const JSZip = require("jszip");

const searchfile = () => {


fs.readFile('./data/2-11253540.zip', function (err, data) {
    if (err) throw err;
    JSZip.loadAsync(data).then(function (zip) {
        console.log('Process Zip: ', zip);
    });
});
};

describe('Process', () => {

const process = require('./process');
searchfile();
it('001', () => expect(process()).toEqual(null));

});

它看起来和我上面描述的不太相似,但它是一个测试版本来检查它是否工作。在我的业力配置中,我有 browserify 来处理需求。

所以,searchfile 函数搜索一个文件,process 函数将使用这个文件。当我运行这个测试时,我遇到 fs.readFile 不是函数的错误。 但是,如果我将 searchfile 的代码放在 process 函数中并直接运行它就可以正常工作。

为什么它不起作用?

【问题讨论】:

  • 我尝试使用 browserify-fs ,但没有帮助。
  • 移到摩卡,工作。

标签: javascript node.js unit-testing karma-jasmine


【解决方案1】:

看看屏幕截图中最后几行绿色文字(为什么要发布文字图片?!)。

您正在 Chrome 中运行测试。

fs 模块是一个 Node.js 功能。

fs 模块在 Chrome 中不可用(如果网页可以从访问者的文件系统中读取任意文件,那就太愚蠢了)。

【讨论】:

  • 好的,谢谢,但我应该如何重写我的测试配置和/或测试,以使其工作?使用 PhantomJS 吗?
  • PhantomJS 也在浏览器中运行代码。如果你想为 Node.js 测试东西,那么你需要一个测试运行器,它旨在使用 Node.js 运行测试,而不是使用浏览器。
猜你喜欢
  • 2013-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 2016-10-06
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
相关资源
最近更新 更多