使用Jasmine存根时未定义对象

时间:2019-09-18 12:26:56

标签: javascript jasmine

我对茉莉很陌生。我打算将其用于香草javascript项目。初始配置轻而易举,但是使用spyOn时我收到对象未定义的错误。

我已经下载了版本3.4.0 Jasmine Release Page,并将文件“按原样”添加到我的项目中。然后,我相应地更改了jasmine.json文件,并查看所有通过的示例测试。但是,在私有对象上尝试spyOn时,出现了未定义错误,

if (typeof (DCA) == 'undefined') {
    DCA = {
        __namespace: true
    };
}
DCA.Audit = {
   //this function needs to be tested
   callAuditLogAction: function (parameters) {
        //Get an error saying D365 is not defined
        D365.API.ExecuteAction("bu_AuditReadAccess", parameters,
            function (result) { },
            function (error) {
                if (error != undefined && error.message != undefined) {
                    D365.Utility.alertDialog('An error occurred while trying to execute the Action. The response from server is:\n' + error.message);
                }
            }
        );
    }
}

和我的规格等级

describe('Audit', function(){
    var audit;
    beforeEach(function(){
        audit = DCA.Audit;
    })   
    describe('When calling Audit log function', function(){        
        beforeEach(function(){

        })
        it('Should call Execute Action', function(){
            var D365 = {
                API : {
                    ExecuteAction : function(){
                        console.log('called');
                    }
                }
            }

            // expectation is console log with say hello
            spyOn(D365.API, 'ExecuteAction').and.callFake(() => console.log('hello'));

            var params = audit.constructActionParameters("logicalName", "someId", 'someId');
            audit.callAuditLogAction(params);
        })
    })
})

如您所见,我的spec类并不了解实际的D365对象。我希望在不注入D365对象的情况下存根。我需要存根整个365库并将其链接到我的测试运行器html吗?

1 个答案:

答案 0 :(得分:0)

经过一番思考后,我开始工作了。因此,仍然需要将包含D365的库添加到我的测试运行器html文件中。之后,我可以伪造如下的方法调用,

it('Should call Execute Action', function(){            
        spyOn(D365.API, 'ExecuteAction').and.callFake(() => console.log('hello'));

        var params = audit.constructActionParameters("logicalName", "someId", 'someId');
        audit.callAuditLogAction(params);
    })

它现在正在工作。