заглушка синона на функции модуля - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь проверить класс ES6, но я не знаю, как заглушить функциональный модуль с 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 , но выдаю эту ошибку:

Невозможно заглушить несуществующее собственное свойство callSoap

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

наконец, мне пришлось изменить модуль на синтаксис 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
       }
    )
  });
});
0 голосов
/ 15 мая 2018

Я также заметил, что вы заглушили метод callSoap экземпляра soapModule.Он должен быть заглушен на прототипе 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);
    });
});
...