javascript - 模块功能上的 sinon stub

标签 javascript node.js unit-testing sinon

我正在尝试测试一个 es6 类,但我不知道如何使用 sinon 来 stub 函数模块。 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;

my-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 上 stub ,但生成此错误:

Cannot stub non-existent own property callSoap

最佳答案

最后,我不得不将模块更改为 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
       }
    )
  });
});

关于javascript - 模块功能上的 sinon stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50298326/

相关文章:

javascript - div 是否会弄乱文本选择?

javascript - 如何在nodejs中将嵌套的JSON转换为excel

angular - 如何在 Angular 中不使用方法 stub 导入的模块?

javascript - 对于通过 Angular $http 发送的 JSON 对象属性,PHP 显示 "{"或 "["

javascript - 如何从 Chrome 扩展调用网站的功能?

javascript - 如何不断检查 JavaScript 函数是否可用,然后在可用时调用

node.js - MongoDB 驱动程序 : missing delimiting slash between hosts and options

javascript - 如何正确使用带有异步函数的 Promise.all() 和 then()?

python - 如何编写装饰器在未导入模块时跳过某些测试?

python - 如何在pytest中打印到控制台?