Nodejs,moch/chai 在 macOS 上失败 "Segmentation fault: 11"

Nodejs, moch/chai failing with "Segmentation fault: 11" on macOS

我是 运行 mocha/chai (3.2.0/3.5.0) 基于 nodejs (6.10.2) 的应用程序的测试用例,在 macOS 10.12.4 ,我 运行 陷入 "Segmentation fault: 11" 失败。

到目前为止我已经尝试过:

对我来说失败的代码如下。

    chai.request(url)
        .post(`/api/filestore?token=${token}`)
        .timeout(20000)
        .attach('file', fs.readFileSync(filepath), filename)
        .field('name', data.name)
        .field('description', data.description)
        .field('keywords', data.keywords)
        .end(function(err, res) {
            if (err) { done(err); }
            res.should.have.status(200);
            res.should.be.json;
            res.body.should.have.property('name');
            res.body.should.have.property('description');
            res.body.should.have.property('categories');
            res.body.keywords.should.be.a('array');
            res.body.keywords.join(',').should.be.equal(data.keywords);
            done();
        });

当我删除 'attach' 行时,分段错误消失了:

.attach('file', fs.readFileSync(filepath), filename)

我单独尝试了 fs.readFileSync(filepath),没有遇到问题。

这在过去不是问题,最近才成为问题。我想知道它是否与 OS 的升级同时发生,但我不能确定。测试文件只有34K大小

有人有什么建议吗?

编辑:在 Ubuntu 测试机上失败以及分段错误。

chai 代码似乎是 'red herring'。使用 segfault-handler 节点模块,我能够确定问题实际上是由正在测试的项目中的代码引起的(在同一进程中是 运行)。

就我而言,堆栈跟踪表明问题是由 sqlite3 代码中的某些内容引起的。进一步调查显示,这是由于未处理传递给 Promise.mapSeries 的函数中的 return 值,该函数通过 Sequelize 执行 sqlite SQL 操作。

请注意,我使用 bluebird 来实现我的承诺。