如何在节点中使用 sinon 为 module.exports 和原型编写单元测试
How to write unittests for module.exports and prototype using sinon in node
我有两个文件 - cloud utils.js 和 processor.js。我在 processor.js 文件
中导入 utils.js 文件
如何在 node js 应用程序中使用 sinon 为以下代码编写单元测试用例。
utils.js
exports.create = function(applicationId, password) {
return new sdk(applicationId, password);
}
function sdk(applicationId, password) {
this.appId = applicationId;
this.password = password;
this.serverUrl = "https://cloud.com";
}
sdk.prototype.processImage = function(filePath, settings, userCallback) {
console.log('here at processImage');
}
processor.js
import CloudUtils from '../lib/sdk';
export default class CLOUD {
constructor() {}
getCloudData = async(payload) => {
var sdk = CloudUtils.create(appId, password);
sdk.processImage(input, settings, this.uploadCompleted);
}
}
现在,我必须为 processor.js 文件的 getCloudData()
方法和间谍 sdk.processImage()
方法编写测试用例。
我遇到了困难 运行 你的 babel 代码所以,使用了 non-ES 代码。测试是检查processImage是否至少被调用过一次,如果是,则断言返回值是否为'cloud'。
要使测试通过,只需在存根调用中传递值 'cloud'。
// a.js
var B=require('./b');
class CLOUD {
getCloudData(){
var b = new B();
return b.processImage();
}
}
module.exports = CLOUD;
// b.js
class cloudutils {
processImage(){
return 'cloud';
}}
module.exports = cloudutils;
// 测试文件
var A=require('./a'),B=require('./b')
var sinon=require('sinon');
var assert=require('assert');
describe("Test", () => {
var InstanceOfB;
var InstanceOfA;
beforeEach(() => {
InstanceOfB = new B();
InstanceOfA = new A();
});
it('should call processImage at least once', () => {
sinon.stub(B.prototype, 'processImage', () => 'mock');
let res = InstanceOfA.getCloudData();
sinon.assert.calledOnce(B.prototype.processImage);
assert.equal(res,'cloud');
});
});
我有两个文件 - cloud utils.js 和 processor.js。我在 processor.js 文件
中导入 utils.js 文件如何在 node js 应用程序中使用 sinon 为以下代码编写单元测试用例。
utils.js
exports.create = function(applicationId, password) {
return new sdk(applicationId, password);
}
function sdk(applicationId, password) {
this.appId = applicationId;
this.password = password;
this.serverUrl = "https://cloud.com";
}
sdk.prototype.processImage = function(filePath, settings, userCallback) {
console.log('here at processImage');
}
processor.js
import CloudUtils from '../lib/sdk';
export default class CLOUD {
constructor() {}
getCloudData = async(payload) => {
var sdk = CloudUtils.create(appId, password);
sdk.processImage(input, settings, this.uploadCompleted);
}
}
现在,我必须为 processor.js 文件的 getCloudData()
方法和间谍 sdk.processImage()
方法编写测试用例。
我遇到了困难 运行 你的 babel 代码所以,使用了 non-ES 代码。测试是检查processImage是否至少被调用过一次,如果是,则断言返回值是否为'cloud'。
要使测试通过,只需在存根调用中传递值 'cloud'。
// a.js
var B=require('./b');
class CLOUD {
getCloudData(){
var b = new B();
return b.processImage();
}
}
module.exports = CLOUD;
// b.js
class cloudutils {
processImage(){
return 'cloud';
}}
module.exports = cloudutils;
// 测试文件
var A=require('./a'),B=require('./b')
var sinon=require('sinon');
var assert=require('assert');
describe("Test", () => {
var InstanceOfB;
var InstanceOfA;
beforeEach(() => {
InstanceOfB = new B();
InstanceOfA = new A();
});
it('should call processImage at least once', () => {
sinon.stub(B.prototype, 'processImage', () => 'mock');
let res = InstanceOfA.getCloudData();
sinon.assert.calledOnce(B.prototype.processImage);
assert.equal(res,'cloud');
});
});