2017-04-15 69 views
1

我正在为基于nodejs(6.10.2)的应用程序运行基于mocha/chai(3.2.0/3.5.0)的测试用例,在macOS 10.12 .4,我遇到了“分段故障:11”故障。在macOS上Nodejs,moch/chai在“分段错误:11”上失败

到目前为止,我曾尝试:

  • 删除我的node_modules文件夹,做一个新的npm install
  • 检查过时的依赖关系,并提升他们
  • 升级版本的NodeJS(使用6.7.0), via sudo port upgrade nodejs6

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

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

我已分别尝试了fs.readFileSync(filepath),我没有遇到这个问题:

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(); 
     }); 

段故障,当我删除“附加”线消失。

这不是过去的问题,最近才成为问题。我想知道它是否与操作系统的升级一致,但我不能确定。测试文件的大小只有34K。

有没有人有任何建议?

编辑:在Ubuntu测试机上出现故障并出现分段错误。

+0

奇怪......也许是读取权限问题?如果在测试之前执行'fs.readFileSync()'位,那么将文件对象传递给'attach()'方法是否一样?这会告诉你它是否是readFile或者segfaults的附件。 – jakerella

回答

1

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

在我的情况下,堆栈跟踪提示该问题是由sqlite3代码中的某些内容引起的。进一步的调查显示,这是因为没有处理传递给Promise.mapSeries的函数的返回值,该函数通过Sequelize执行sqlite SQL操作。

注意我使用蓝鸟作为我的承诺。

+0

尝试使用[官方安装程序](https://nodejs.org/en/)安装Node(之后,重新构建所有依赖项以确保它们与新版本链接)。 – robertklep

+0

这是为连续构建生成的VM,使用Ubuntu以及使用macOS的本地机器发生的一致故障。 –

相关问题