【发布时间】:2018-05-18 11:38:56
【问题描述】:
给定以下代码: (请注意,访问已被承诺)
const fs = require('fs')
const util = require('util')
const access = util.promisify(fs.access)
const custom = () => {
return access('myfile', fs.constants.R_OK)
.then(() => {
return true
}).catch(err => {
if (err.code !== 'ENOENT') throw err
return false
}).then(fileExists => {
return `File exists: ${fileExists}`
})
}
module.exports = custom
我的单元测试不起作用,因为调用的是真正的 access 方法而不是存根方法:
const chai = require('chai')
const chaiAsPromised = require('chai-as-promised')
const custom = require('./custom')
const fs = require('fs')
const sinon = require('sinon')
chai.use(chaiAsPromised)
const expect = chai.expect
describe('custom', () => {
let sandbox = sinon.createSandbox()
afterEach(function () {
sandbox.restore()
})
it('should return file exists true', () => {
sandbox.stub(fs, 'access').yields(null)
return expect(custom()).to.eventually.equal('File exists: true')
})
it('should return file exists false', () => {
const error = new Error('No such file or directory')
error.code = 'ENOENT'
sandbox.stub(fs, 'access').yields(error)
return expect(custom()).to.eventually.equal('File exists: false')
})
})
如何使测试工作,给access 是在custom.js 文件中promisified?
参考资料:
【问题讨论】:
-
这里似乎有些混乱:通过尝试测试 Promisified fs.stat 的回调,您基本上是在尝试确保 Bluebird 的 Promisify 按预期工作。不需要这样做,Bluebird 开发人员已经做到了。您现有/不存在的文件测试也已由 node.js 人员完成,因此也无需测试。可能您想披露您尝试测试的内容/原因...
-
感谢您的回复,我用我正在尝试测试的部分逻辑更新了问题。
标签: javascript node.js mocha.js sinon chai