当前位置: 首页 > 知识库问答 >
问题:

模块功能上的Sinon存根

皇甫礼骞
2023-03-14

我正在尝试测试一个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;

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上存根,但生成了以下错误:

无法存根不存在的自己的属性call Soap

共有2个答案

能文华
2023-03-14

我还注意到,您已经存根了肥皂模块实例的调用Soap方法。它需要是 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);
    });
});
胡志
2023-03-14

最后,我必须将模块更改为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
       }
    )
  });
});
 类似资料:
  • 我正在尝试使用sinon存根替换一个可能需要很长时间的函数。但是当我运行测试时,测试代码似乎没有使用sinon存根。 这是我要测试的代码。 这是测试代码。 我得到一个断言错误 我做错了什么?为什么不使用存根?摩卡的测试框架。

  • 我尝试了一个虚拟模块,并存根,但不工作。 应用程序.js test.js 我尝试了以下建议:sinon stub不替换函数 但还是一样。它不能取代功能。

  • 模块功能 nomodule 禁用内核模块加载功能(CONFIG_MODULES)。 [KNL] module.sig_enforce 强制内核在加载模块时检查模块签名(CONFIG_MODULE_SIG),并且只接受具有合法签名的模块。如果内核开启了CONFIG_MODULE_SIG_FORCE,那么无论是否使用此选项,都将强制检查模块的签名。

  • 一、简介 本主要介绍PHPCMS内置相关模块的标签调用方式 二、目录 内容模块 评论模块 投票模块 公告模块 专题模块 会员模块 友情链接模块 企业黄页

  • 问题内容: 我想不出一种方法来对从定义此函数的同一模块中调用的函数进行存根(存根似乎不起作用)。这是一个例子: myModule.js: myModule.test.js: 这让我想起了(几乎)不可插拔的Java静态函数。 知道如何实现我要做什么吗?我知道在另一个模块中进行提取将起作用,但这不是我在这里尝试做的。我也知道,调用的方法与关键字也将工作中,我逐步使用困惑 在这方面(因为我没有使用OOP

  • 在我们前面的例子中,我们开始看到了。 我们的根模块有一个组件,一个管道和一个服务,其唯一的目的是处理信用卡。 如果我们将这三个元素提取到自己的功能模块,然后将它们导入我们的根模块怎么办? 我们将这样做。第一步是创建两个文件夹以区分属于根模块的元素和属于要素模块的元素。 注意每个模块文件夹下的模块文件: app.module.ts 和 credit-card.module.ts.。让我们先关注后者。