【问题标题】:How do I test javascript (Jasmine) in this case?在这种情况下如何测试 javascript (Jasmine)?
【发布时间】:2018-03-18 05:35:02
【问题描述】:

这是我正在尝试测试的修改后的较短版本。


    var Service = (function() {

      function doStuff(command, package) {
        var response = ""

        switch(command) {
          case "A":
            response = a(package);
            break;
          case "B":
            response = b(package);
            break;
          case "C":
            response = c(package);
            break;
          default:
            // should never get here
            response = "NOPE!";
        }

        return response;
      }

      function a(package) {
            // do stuff
      }

      function b(package) {
            // do stuff
      }

      function c(package) {
        // do stuff;
      }

      return {
        doStuff: doStuff,
        a: a,
        b: b,
        c: c
      }
    });

    module.exports = Service;

所以基本上,我正在尝试编写一个单元测试来测试 doStuff 方法,但是当它遇到每种情况时,我只想对 a、b 或 c 之类的方法执行类似的操作,而不是检查取出返回值,因为这些函数 a、b 和 c 中的每一个都返回 true 或 false。因此,我想确定正确的案例是他的,而不是仅仅测试真假。

我无法按照当前的编码方式找到一种方法。我的这个类的测试文件正在创建一个新的实例,我尝试监视这些方法,但这不起作用,因为在这段代码中的实际实例上没有调用它们,它们是在本地调用的。间谍可以做到这一点吗?如果不是,那么以这种方式进行测试的推荐方法是什么?

【问题讨论】:

    标签: javascript unit-testing testing jasmine


    【解决方案1】:

    这不行吗?

    var service = new Service();
    
    const aSpy = spyOn(service, 'a').and.returnValue(true);
    
    // setup the routing they way you want it
    service.command = "A";
    
    var res = service.doStuff(someTestPackage);
    
    expect(aSpy).toHaveBeenCalledWith(someTestPackage);
    expect(res).toBeTruthy();

    【讨论】:

    • 那行不通,这是我尝试的第一种方法,也是我认为它也能正常工作的唯一方法。
    猜你喜欢
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多