代码之家  ›  专栏  ›  技术社区  ›  ali 1214

sinon存根错误“试图将作业的未定义属性包装为函数”

  •  0
  • ali 1214  · 技术社区  · 7 年前

    我正在尝试使用sinon存根测试包含两个变量job和job1的函数。如何给它们临时值以避免函数值。

    在其中一个文件myFunction中。js我有如下函数

    function testFunction() {
      var job = this.win.get.value1   //test
      var job1 = this.win.get.value2 // test1
      if(job === 'test' && job1 === 'test1') {
        return true;
      }
        return false; 
    }
    

    我试图使用karma测试testFunction,我试图用我的值来存根两个值,这样它就可以覆盖函数值

    it('should test my function', function(done) {
      var stub = sinon.stub('job','job1').values('test','test1');
      myFunction.testFunction('test', function(err, decodedPayload) {
        decodedPayload.should.equal(true);
        done();
      });
    });
    

    我收到错误“试图将作业的未定义属性包装为函数”

    1 回复  |  直到 7 年前
        1
  •  0
  •   Zoom    7 年前

    首先,您可以将testFunction简化为以下内容。

    function testFunction() {
      return this.win.get.value1 === 'test' && this.win.get.value2 === 'test1';
    }
    

    这里没有异步操作,所以在测试中不需要使用done()。

    Sinon的“存根”文档建议您使用 sandbox 功能到存根的非功能属性。

    你的问题不清楚“this”的上下文是什么,所以我假设你的测试已经用“myFunction”(你的测试暗示)这个名称实例化了你正在测试的任何东西。

    还不清楚“赢”和“得”是什么,所以这将假定它们是对象。

    不要忘记还原沙盒(),这样就不会污染后续测试。

    it('should test my function', function() {
      var sandbox = sinon.sandbox.create();
      sandbox.stub(myFunction, 'win').value({
        get: {
          value1: 'test',
          value2: 'test1',
        }
      });
    
      myFunction.testFunction().should.equal(true);
    
      sandbox.restore();
    });