不确定如何使用sinon来存储qunit

时间:2016-08-30 11:59:54

标签: javascript sinon

我正在尝试单元测试方法A.所有方法都是调用方法B(获取urlVars)。如果从方法A返回到B的结果等于传递给方法A的值,那么它必须返回true,否则返回false。

function A(result) {
    if (B()["type"] === result) {
        return true;
    } else {
        return false;
    }
}

function B() {
  do something
  }
  return something;
}

我试图确保函数B返回我使用sinon传递给函数A的相同值。有人可以提供帮助吗?

1 个答案:

答案 0 :(得分:0)

简短回答可能是这样的:



// just for the example
var result = "test";

// function under test
function A(result) {
    if (B()["type"] === result) {
        return true;
    } else {
        return false;
    }
}

//creating the stub
var B = sinon.stub()

// sets the return value of the Stub
B.returns({type:result});

// testing the function
console.info(A(result));

<script src="http://sinonjs.org/releases/sinon-1.17.5.js"></script>
&#13;
&#13;
&#13;

答案越长检查文档http://sinonjs.org/docs/#stubs。 问题是你真的需要 sinonjs ,还是你不能手写它?

  

通过单元测试,我总是手动编码 stubs / mocks / ...首先,当我开始编码时   很多或重复我使用框架。

更新: 有关单元测试的一些信息
(我希望这不是太基础,有助于解决您的问题)

如果我正在测试A功能,我想知道如果功能A对我的成像方式做出反应。所以我创建了testCases

TestCase 1)如果我使用参数A调用函数test,结果应为true

TestCase 2)如果我使用参数A调用函数test1,结果应为false

......等等。

问题: 我只想测试来自A的逻辑,而不是调用B而不依赖{{1}的功能}}
解决方案:我模拟/存根/ ......它出来了。

这里我将如何接近它(在stackoverflow环境中)

&#13;
&#13;
B
&#13;
var passed = "<span style='color:green'>passed</span><br />";
var failed = "<span style='color:red'>failed</span><br />";
// Helper UnitTesting framework ;-)
function assertIsEqulaHelper(expected, actual){
  document.write(expected===actual?passed:failed);
}

var B;

function testCase1(){
    B = sinon.stub();
    B.onCall(0).returns({type:"test"});
    assertIsEqulaHelper(true, A("test"));
}

function testCase2(){
   B = sinon.stub();
   B.onCall(0).returns({});
  assertIsEqulaHelper(false, A("test1"));
}


// function under test
function A(result) {
  if (B()["type"] === result) {
    return true;
  } else {
    return false;
  }
}

testCase1();
testCase2();
&#13;
&#13;
&#13;

  

这必须进行优化,但它可以像这样工作。

最终更新:已提供代码的信息

<script src="http://sinonjs.org/releases/sinon-1.17.5.js"></script>