Sinon.spy导入方法失败

时间:2018-08-02 05:00:06

标签: javascript unit-testing sinon sinon-chai

我有两个JS模块,分别是A和B。在模块A中,我有一个方法依赖于从模块B导入的另一个方法。现在我如何用sinon.spy测试,是否A的方法会触发B的方法?

//ModuleA.js
import{ methodFromB } from "ModuleB.js";

function methodFromA (){
methodFromB();
}

export{
 methodFromA
}

//ModuleB.js
function methodFromB (){ 
 //doSomething
}

ModuleA.Spec.js

import sinon from 'sinon';
import { assert,expect } from "chai";
import * as modB from "ModuleB.js";

import { methodA } from '../js/ModuleA.js';


describe("ModuleA.js", function() {

beforeEach(function() {
    stubmethod = sinon.stub(modB, "methodB").returns("success");              
});

after(function() {

});

describe("#methodA", function() {
    it("Should call the method methodB", function() {
        expect(methodA()).to.deep.equal('success');
        expect(stubmethod.calledOnce).to.equal(true);
    });

});    

});

尝试对方法B进行存根处理后,出现错误“未定义的期望值与“成功”非常相等”。

谢谢。

2 个答案:

答案 0 :(得分:0)

您应该模拟模块B,并希望它被调用而不是methodFromA的间谍

答案 1 :(得分:0)

您从module B存错了功能。根据您的源文件,它应该是methodFromB而不是methodB

describe("ModuleA.js", function () {

  beforeEach(function () {
    stubmethod = sinon.stub(modB, "methodFromB").returns("success"); // change to methodFromB
  });

  after(function () {
    stubmethod.restore(); // don't forget to restore
  });

  describe("#methodA", function () {
    it("Should call the method methodB", function () {
      expect(methodA()).to.deep.equal('success');
      expect(stubmethod.calledOnce).to.equal(true);
    });

  });
});