首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模函数上的sinon存根

模函数上的sinon存根
EN

Stack Overflow用户
提问于 2018-05-11 18:36:24
回答 2查看 4.6K关注 0票数 2

我正在尝试测试一个es6类,但我不知道函数模块的存根是如何运行的。sm.callSoap函数下的测试不覆盖线

我试试看:

module.js

代码语言:javascript
复制
 function soapModule(){
      this.callSoap = (id) => {
         ....//some code
          return new Promise((resolve,reject) =>{
             return resolve("whatever");
          }
      }
 }

index.js (这是模块的索引)

代码语言:javascript
复制
 "use strict";

 var soapModule = require('./module/module');

 module.exports.soapModule = soapModule;

my-class.js

代码语言:javascript
复制
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

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-23 21:12:14

最后,我不得不将模块更改为ECMAScript 6语法。

所以,我的新模块看起来如下:

module.js

代码语言:javascript
复制
  export function callSoap(id){
     ....//some code
      return new Promise((resolve,reject) =>{
         return resolve("whatever");
      }
  }

当我更改为ECMAScript 6语法时,我实现babel-cli来编译为EC5,因此索引更改为:

代码语言:javascript
复制
   var soapModule = require('./module/module'); 

代码语言:javascript
复制
    var soapModule = require('./lib/module'); //<-- this is the build output folder

然后,单元测试看起来如下所示:

代码语言:javascript
复制
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
       }
    )
  });
});
票数 2
EN

Stack Overflow用户

发布于 2018-05-14 23:30:47

我还注意到,您对callSoap实例的soapModule方法进行了修改。它需要是soapModule原型上的存根,所以当您在myMethod内部创建一个实例时,它就有了短尾版本。

代码语言:javascript
复制
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);
    });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50298326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档