Fab*_*eli 9 javascript unit-testing mocking node.js
例如,我有以下文件:
规格/配置/文件mock.js
var mock = require('mock-fs');
mock({
'files': {
'expense.csv': 'a;b;c;d\n1;2;3;4\n5;6;7;8'
}
});
Run Code Online (Sandbox Code Playgroud)
应用/阅读/ reader.js
var fs = require('fs');
var reader = {
read: function(path) {
return fs.readFileSync(path, 'utf8');
},
write: function(path, object) {
fs.writeFileSync(path, object);
}
};
module.exports = reader;
Run Code Online (Sandbox Code Playgroud)
应用/阅读/ reader.spec.js
describe('reader.js test', function(){
var reader = require('./reader.js');
var mock = require('mock-fs');
it('should return a simple string', function(){
expect(reader.read('files/expense.csv')).toEqual('a;b;c;d\n1;2;3;4\n5;6;7;8');
});
it('should write a json object', function(){
// WHAT TO DO?!
});
});
Run Code Online (Sandbox Code Playgroud)
该reader.read函数与mock-fs工作正常.
但我正在尝试测试该reader.write功能,我没有在文档中找到有关"写"功能的任何内容.有人已经解决了吗?
正如 @Strech 在评论中发布的那样,您可以在调用 reader.write 以检查内容是否已写入假文件后尝试对 reader.read 进行期望。
恕我直言,有一种更好的方法来测试此功能,更加坚持单元测试原则。我们知道fs模块可以工作,因为它是节点核心模块的一部分,并且在那里进行了测试,因此我们可以模拟fs方法,并检查是否使用预期参数调用这些方法,例如使用Sinon:
const Reader = require('../reader.js');
const sinon = require('sinon');
const fs = require('fs');
const expect = require('expect.js');
describe('reader.js test', function () {
let readFileSync;
let writeFileSync;
beforeEach(() => {
readFileSync = sinon.stub(fs, 'readFileSync').returns({});
writeFileSync = sinon.stub(fs, 'writeFileSync').returns({});
});
afterEach(() => {
readFileSync.restore();
writeFileSync.restore();
});
it('should return a simple string', () => {
Reader.read('files/expense.csv');
expect(readFileSync.calledOnceWith('files/expense.csv', 'utf8')).to.be(true);
});
it('should write a json object', () => {
Reader.write('files/expense.csv', 'test');
expect(writeFileSync.calledOnceWith('files/expense.csv', 'test')).to.be(true);
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1852 次 |
| 最近记录: |