我有一个接受回调的类的构造函数。它还有一个方法loadFile
,它从文件中获取内容,稍微修改它并使用修改后的内容调用回调。到目前为止,可以轻松测试课程。
现在,我想添加一个手表功能。 loadFile
将执行我刚才描述的内容并开始观看文件。每次文件更改时,都会重复该过程(加载文件 - >修改内容 - >调用回调)。我尝试使用Jasmine测试它,但我无法使其工作。
简化代码如下所示:
const path = require('path')
const watch = require('fs').watch
const write = require('fs').writeFile
class Loader {
constructor (callback) {
this.callback = callback
}
loadFile (file) {
watch(file, (p, e) => {
console.log('path changed', p, e)
// do some important stuff here
this.callback(p)
})
}
}
describe ('Loader', () => {
var loader
var callback
beforeEach(() => {
callback = jasmine.createSpy('callback')
loader = new Loader(callback)
})
it('converts a markdown file', () => {
// this file already exists
const file = path.join(__dirname, 'md', 'header.md')
loader.loadFile(file)
write(file, 'hello', 'utf8')
expect(callback).toHaveBeenCalled()
console.log('end of test')
})
})
命令行结果为:
Started
end of test
path changed change header.md
path changed change header.md
F
Failures:
1) Loader converts a markdown file
Message:
Expected spy callback to have been called.
Stack:
Error: Expected spy callback to have been called.
at Object.it (/path/to/spec/callback.spec.js:34:22)
1 spec, 1 failure
Finished in 0.015 seconds
此测试不加载实际内容,我简化它以显示我遇到的问题:调用回调,但是在期望之后。
我花了很多时间搞清楚什么是错的,但我失败了。我想我已尝试过使用Jasmine提供的done()
的所有可能组合,但我没有运气。我很感激任何帮助。