javascript - 如何在同一个服务中模拟一个方法

标签 javascript angularjs unit-testing angularjs-service karma-jasmine

我有这样的服务:

var myApp = angular.module('myApp', []);

myApp.factory('myService', function() {

    var a = function() {
        return b();
    }

    function b() {
        return 'foo';
    }

    return {
        a: a
    };
});

现在,我想通过模拟 b(); 来测试 a();,例如通过让它返回 bar。我的测试是这样的:

it('should call a() and return string bar', function() {
    // mock function b() here
    expect(myService.a()).toBe('bar');
});

在这种情况下,我如何模拟 b();?我正在考虑使用 $provide但它似乎适用于 $inject仅。

最佳答案

您可以使用 spyOn。这是一个例子:

beforeEach(function(){
    spyOn(myService, 'b').and.returnValue('bar');
});

it('should call a() and return string bar', function() {
    expect(myService.a()).toBe('bar');
});

在这里阅读更多关于 spy 的信息 http://jasmine.github.io/2.0/introduction.html#section-Spies

关于javascript - 如何在同一个服务中模拟一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33238220/

相关文章:

javascript - PHP联系表单修改

javascript - Facebook 的 CSS 类名称的 "-cx-PRIVATE-"前缀是否受到 Greasemonkey 类型用户脚本的保护?

css - 指令问题 - 不捕获 innerHTML 文本

javascript - 如何在angularjs中使用服务在多个 Controller 之间共享数据?

spring - Kotlin Autowired问题-Lateinit(OBV)

javascript - 如何简化Javascript中的事件处理?

javascript - Wordpress 缺少 css 和 javascript 文件

AngularJS 的错误?

scala - 如何使用 ScalaTest 在 Playframework 单元测试中覆盖 guice 模块

c# - 使用 C#/Moq 框架模拟带有输入参数的异步 DbContext 函数