javascript - 模块功能上的 sinon 存根
问题描述
我正在尝试测试一个 es6 类,但我不知道如何存根带有 sinon 的功能模块。sm.callSoap 函数下的测试未覆盖行
我试试这个:
模块.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;
我的类.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);
})
}
}
测试.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上存根,但生成此错误:
无法存根不存在的自有属性 callSoap
解决方案
最后,我不得不将模块更改为 ECMAScript 6 语法。
所以,我的新模块如下所示:
模块.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
}
)
});
});
推荐阅读
- c - 如何获得此功能以多次删除循环双向链表的节点?(C)
- xcode - 关于使用 cocoapods 创建私有库
- ansible - 回调插件与 ansible 命令一起使用?
- android - 获取 E/FirebaseInstanceId:令牌检索失败:INVALID_SENDER
- java - 在泛型通配符的上下文中理解继承
- python - 如何在 python 数据库连接中处理“ORA-12504: TNS:listener is not given the SERVICE_NAME in CONNECT_DATA”
- mysql - 如何在 Loopback 4 中仅将 localhost 连接到 MySQL?
- mysql - (MySQL) 如何在没有 DELIMITER 语句的情况下将查询插入函数?
- javascript - 使用 Javascript 触发对 onclick 通风口的反应
- ios - Xcode 找不到库/模块。模拟器不会再次运行应用程序