模块功能上的 sinon 存根
sinon stub on module function
我正在尝试测试 es6 class,但我不知道如何存根功能模块 whit sinon。
sm.callSoap 函数
下的测试不覆盖行
我试试这个:
module.js
function soapModule(){
this.callSoap = (id) => {
....//some code
return new Promise((resolve,reject) =>{
return resolve("whatever");
}
}
}
index.js(这是模块的索引)
"use strict";
var soapModule = require('./module/module');
module.exports.soapModule = soapModule;
我的-class.js
import {soapModule} from "soap-client"
export default class MyClass {
constructor(){
console.log("instance created");
}
myMethod(id){
let sm = new soapModule();
return sm.callSoap(id)
.then(result => {
console.log(result);
}).catch(e => {
console.log("Error :" + e);
})
}
}
test.js
import MyClass from "../src/my-class";
import {soapModule} from "soap-client";
import sinon from 'sinon';
describe("Test MyClass",()=>{
let myclass;
let soap;
let stub;
before(()=>{
myclass = new MyClass();
soap = new soapModule();
stub = sinon.stub(soap,'callSoap');
});
it("test a", ()=>{
let fakeout = {
resp : "tada!"
}
stub.resolves(fakeout);
myclass.myMethod(1);
});
});
我尝试在 soapModule 上存根但生成此错误:
Cannot stub non-existent own property callSoap
我还注意到您已将 soapModule 实例的 callSoap 方法存根。它需要是 soapModule 原型上的存根,因此当您在 myMethod 中创建实例时,它具有存根版本。
import MyClass from "../src/my-class";
import {soapModule} from "soap-client";
import sinon from 'sinon';
describe("Test MyClass",()=>{
let myclass;
let stub;
let stubP;
before(()=>{
myclass = new MyClass();
stub = sinon.stub(soapModule.prototype, 'callSoap');
stubP = sinon.stub(); // second stub to be used as a promise
stub.returns(stubP);
});
after(() => {
stub.restore();
});
it("test a", ()=>{
let fakeout = {
resp : "tada!"
}
myclass.myMethod(1);
stubP.resolves(fakeout);
});
});
最后,我不得不将模块更改为 ECMAScript 6 语法。
所以,我的新模块是这样的:
module.js
export function callSoap(id){
....//some code
return new Promise((resolve,reject) =>{
return resolve("whatever");
}
}
当我更改为 ECMAScript 6 语法时,我实施了 babel-cli 以编译为 EC5,因此索引从:
var soapModule = require('./module/module');
至
var soapModule = require('./lib/module'); //<-- this is the build output folder
然后,单元测试看起来像这样:
import MyClass from "../src/my-class";
import {soapModule} from "soap-client";
import sinon from 'sinon';
describe("Test MyClass",()=>{
let myclass;
let stub;
before(()=>{
myclass = new MyClass();
stub = sinon.stub(soap,'callSoap');
});
it("test a", ()=>{
let fakeout = {
resp : "tada!"
}
stub.resolves(fakeout);
myclass.myMethod(1).then(result =>{
console.log(result) //<----- this is the fakeout
}
)
});
});
我正在尝试测试 es6 class,但我不知道如何存根功能模块 whit sinon。 sm.callSoap 函数
下的测试不覆盖行我试试这个:
module.js
function soapModule(){
this.callSoap = (id) => {
....//some code
return new Promise((resolve,reject) =>{
return resolve("whatever");
}
}
}
index.js(这是模块的索引)
"use strict";
var soapModule = require('./module/module');
module.exports.soapModule = soapModule;
我的-class.js
import {soapModule} from "soap-client"
export default class MyClass {
constructor(){
console.log("instance created");
}
myMethod(id){
let sm = new soapModule();
return sm.callSoap(id)
.then(result => {
console.log(result);
}).catch(e => {
console.log("Error :" + e);
})
}
}
test.js
import MyClass from "../src/my-class";
import {soapModule} from "soap-client";
import sinon from 'sinon';
describe("Test MyClass",()=>{
let myclass;
let soap;
let stub;
before(()=>{
myclass = new MyClass();
soap = new soapModule();
stub = sinon.stub(soap,'callSoap');
});
it("test a", ()=>{
let fakeout = {
resp : "tada!"
}
stub.resolves(fakeout);
myclass.myMethod(1);
});
});
我尝试在 soapModule 上存根但生成此错误:
Cannot stub non-existent own property callSoap
我还注意到您已将 soapModule 实例的 callSoap 方法存根。它需要是 soapModule 原型上的存根,因此当您在 myMethod 中创建实例时,它具有存根版本。
import MyClass from "../src/my-class";
import {soapModule} from "soap-client";
import sinon from 'sinon';
describe("Test MyClass",()=>{
let myclass;
let stub;
let stubP;
before(()=>{
myclass = new MyClass();
stub = sinon.stub(soapModule.prototype, 'callSoap');
stubP = sinon.stub(); // second stub to be used as a promise
stub.returns(stubP);
});
after(() => {
stub.restore();
});
it("test a", ()=>{
let fakeout = {
resp : "tada!"
}
myclass.myMethod(1);
stubP.resolves(fakeout);
});
});
最后,我不得不将模块更改为 ECMAScript 6 语法。
所以,我的新模块是这样的:
module.js
export function callSoap(id){
....//some code
return new Promise((resolve,reject) =>{
return resolve("whatever");
}
}
当我更改为 ECMAScript 6 语法时,我实施了 babel-cli 以编译为 EC5,因此索引从:
var soapModule = require('./module/module');
至
var soapModule = require('./lib/module'); //<-- this is the build output folder
然后,单元测试看起来像这样:
import MyClass from "../src/my-class";
import {soapModule} from "soap-client";
import sinon from 'sinon';
describe("Test MyClass",()=>{
let myclass;
let stub;
before(()=>{
myclass = new MyClass();
stub = sinon.stub(soap,'callSoap');
});
it("test a", ()=>{
let fakeout = {
resp : "tada!"
}
stub.resolves(fakeout);
myclass.myMethod(1).then(result =>{
console.log(result) //<----- this is the fakeout
}
)
});
});