Jasmine测试检查参数传递给Backbone同步

时间:2016-08-25 17:11:57

标签: backbone.js jasmine

我正在编写一个jasmine单元测试来检查是否使用Parameter(它是一个Object)调用BackBone同步。

这是代码库

在我的收藏中,我有同步方法,即调用Back Bone sync

sync: function ( method, collection, options ) {
            if ( !options ) {
                options = {};
            }
            options.headers = {
                “x-yz-webservice-client-id": “abcde"
            };
            return Backbone.sync( method, collection, options );
}

这里我想检查一下Backbone sync的options.headers是否设置为object {                 “x-yz-webservice-client-id":”abcde"             };

我在茉莉花测试中尝试做什么,哪些不起作用如下:

var headers = {
                “x-yz-webservice-client-id": “abcde"
  };
var autoCompleteRecommendationsCollection = new AutoCompleteRecommendationsCollection({},opt);
spyOn( Backbone, 'sync' );
   autoCompleteRecommendationsView.initialize( options );
expect(Backbone.sync).toHaveBeenCalledWith(jasmine.anything(),  jasmine.anything(), jasmine.objectContaining(headers));

我想测试第三个参数,如上所述将属性设置为header。有没有更好的方法来检查这个论点?

1 个答案:

答案 0 :(得分:0)

假设您使用的是Jasmine v2.x,另一种方法是:

expect(Backbone.sync.calls.mostRecent().args[2].headers)
   .toEqual(jasmine.objectContaining({
       “x-yz-webservice-client-id": “abcde"
   }));

然而,您的代码似乎没有任何问题,您确认您的间谍实际上已被调用吗?由于您正在处理全局Backbone变量,因此您需要确保测试中的规范和类共享相同的变量。