这是我的功能
$scope.buildForm = function (majorObjectId, name) {
$window.open("/FormBuilder/Index#/" + $scope.currentAppId + "/form/" + majorObjectId + "/" + name);
};
这是我的 Jasmine 测试规范
it('should open new window for buildForm and with expected id', function () {
scope.majorObjectId = mockObjectId;
scope.currentAppId = mockApplicationId;
var name = "DepartmentMajor";
scope.buildForm(mockObjectId, name);
scope.$digest();
expect(window.open).toHaveBeenCalled();
spyOn(window, 'open');
spyOn(window, 'open').and.returnValue("/FormBuilder/Index#/" + scope.currentAppId + "/form/" + scope.majorObjectId + "/" + name);
});
但是当我尝试运行它时,它正在打开一个新标签,我不希望这种情况发生,我只想检查给定的 returnValues 是否存在!
最佳答案
首先你的期望 (window.open).toHaveBeenCalled() 是在错误的地方。
在监视事件之前,您不能指望。
现在来回答你的问题
Jasmine 中有不同的方法可以监视依赖项,例如
Please check Jamine doc for complete list
根据您的要求,以下示例测试用例
$scope.buildForm = function() {
$window.open( "http://www.google.com" );
};
将会
it( 'should test window open event', inject( function( $window ) {
spyOn( $window, 'open' ).and.callFake( function() {
return true;
} );
scope.buildForm();
expect( $window.open ).toHaveBeenCalled();
expect( $window.open ).toHaveBeenCalledWith( "http://www.google.com" );
} ) );
关于angularjs - 如何使用 jasmine 测试 $window.open,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31286162/