javascript - 如何解决TypeError : spyOn andReturn is not a function?

标签 javascript karma-runner karma-jasmine

我正在尝试为服务运行 jasmine 单元测试。我模拟了 $location 但出现错误:

app.factory('testService', function($location) {
  return {
    config: function() {
      var host = $location.absUrl();

      var result = '';

      if (host.indexOf('localhost') >= 0) {
        return 'localhost'
      }

      if (host.indexOf('myserver') >= 0) {
        return 'myserver'
      }

    }

  };
});

我的测试是这样的:

describe('testing service', function () {
    var configService, $rootScope, $location;

    beforeEach(module('myApp'));
    beforeEach(inject(function (_$location_) {
        //$rootScope = _$rootScope_;
        $location = _$location_;
        //configService=_configService_;
        spyOn($location, 'absUrl').andReturn('localhost');
    }));

    it('should return something  ', function () {
        inject(function (configService) {
            //expect($location.absUrl).toHaveBeenCalled();
            //expect($rootScope.absUrl()).toBe('localhost');

            var result= configService.config($location);
            expect(result).toBe('localhost');
        });
    });
});

这是我得到的错误: TypeError: spyOn(...).andReturn 不是函数?

最佳答案

Jasmine 2.0 改变了一些 spy 语法。查看Jasmine 2.0 docs .

请使用:

spyOn($location, 'absUrl').and.returnValue('localhost');

关于javascript - 如何解决TypeError : spyOn andReturn is not a function?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32599346/

相关文章:

javascript - 变量访问的 Angular 和 javascript 范围

javascript - 如何将逗号分隔列表转换为 JavaScript 中的 <ul> 列表?

karma-runner - 没有框架 jasmine 的提供者

javascript - 如何在 Angular 单元测试中创建 ArrayBuffer 变量,Jasmine/Karma

angular - 找不到模块 '@angular/cdk/testing'

javascript - phantomjs 总是返回在特定网站上找不到的页面

javascript - 如何声明函数中未使用的参数

node.js - Karma 测试运行程序 - 无法捕获 chrome

javascript - 如果测试有错误,Karma 不会失败

angularjs - 如何在不更改所有单元测试的情况下避免在 app.run 周期期间进行的调用出现 "Unexpected request: GET"