【发布时间】:2013-10-02 00:54:21
【问题描述】:
我正在开发 Backbone 应用程序,我必须使用 sinon.js 和 Qunit.js 对其进行单元测试。 场景是我有一个扩展 baseview 的 carView,而 baseview 扩展了主干的视图。
我在汽车视图中有一个函数说 buildFormUrl,它返回一个字符串。字符串值会根据用户操作进行更改。
是否可以使用 sinon.stub 制作 buildFromUrl stub 并调用 stub 函数然后检查返回值?
主干代码片段:
var CarSearchView = BaseView.extend({
intitalize : function(){
//some code
},
buildFormUrl: function(baseUrl){
// process a different form url based on new/used selection
var newUsedToggleValue = this.$('#cars-form-new-used-select').val(),
url = baseUrl;
if (newUsedToggleValue === 'used') {
url += 'for-sale/searchresults.action';
} else {
url += 'go/search/newBuyIndex.jsp';
}
return url;
}
});
诗农代码片段:
QUnit.test('_buildURLForm function', function(){
QUnit.expect(1);
var BuildFormURLStub = Sinon.stub(CarSearch.prototype, 'buildFormUrl');// building the sinon stub
var toggleButton = $(SampleHtml).find('cars-new-used-toggle');
$(toggleButton).first().click(); //clicking the button
var baseURL = "http:\\www.cars.com";
var output = Sinon.once(BuildFormURLStub.withArgs(baseURL)); // passing the argument and and calling the function using sinon once![enter image description here][1]
var Expected = baseURL + 'for-sale/searchresults.action';
QUnit.deepEqual(output,Expected,"For new Toggle button clicked");
});
收到错误“函数未定义”
'undefined' 不是函数(评估'Sinon.once(BuildFormURLStub.withArgs(baseURL))')
TypeError: 'undefined' is not a function (evalating 'Sinon.once(BuildFormURLStub.withArgs(baseURL))')
【问题讨论】:
-
为什么要存根要测试的功能。这是没有意义的。也许你可以在这里解释你想测试什么。
-
嗨 Andreas Koberle 我只想检查函数的返回值。这将根据用户输入而改变。我搜索了更多。是否可以使用 spy.returned(obj) 检查该值;其中 object 将是实际的返回值,而 spy 将使用视图函数本身进行初始化?
标签: javascript backbone.js qunit sinon