【问题标题】:jasmine mock second method茉莉模拟第二种方法
【发布时间】:2016-01-20 12:27:31
【问题描述】:

我正在尝试在 Jasmine 中执行以下操作,但不确定是否可行:

我得到了一个具有 2 种方法的服务对象,A 和 B。 方法 A 调用方法 B(B 实际上是一个 $http 调用,我不想在测试期间这样做:我想模拟它)。

在我的 BeforeEach 部分中,我这样做: spyOn(Serviceinstance, 'B').and.callFake(function(){ return true; });

在我的测试中:

var result = Serviceinstance.A();
expect(result).toBeTrue();

当然,B的真实代码返回false。 我的问题是我的测试总是失败。 spy 中提供的函数永远不会被方法 A 调用。 另一方面,如果我这样称呼 B:

var result = Serviceinstance.B();

然后调用spy的函数,我的测试通过了。

所以我应该像这样修改我的实例:

Serviceinstance.B = function(){return true;}

因为 Jasmine 不能模拟调用堆栈的“第二”级? (对我来说似乎完全不可能)

我确实错过了什么......

【问题讨论】:

  • 我知道这个问题可能看起来很愚蠢,但这确实是我的行为。我已经阅读了 jasmine 文档,但不明白发生了什么,所以欢迎任何指针(C# 背景,所以 Mocking 通常没什么大不了的 :))

标签: javascript unit-testing jasmine


【解决方案1】:

这是一个有效的代码:

describe('Service test suite', function() {
    it('should return true', function() {
        var Serviceinstance = new Service();
        spyOn(Serviceinstance, 'B').and.callFake(function() {
            return true;
        });
        expect(Serviceinstance.A()).toBe(true);
    })
});

https://jsfiddle.net/ronapelbaum/9moLhhbr/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 2015-08-11
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多