在这种情况下如何测试javascript(Jasmine)?

时间:2018-03-18 05:35:02

标签: javascript unit-testing testing jasmine

以下是我要测试的修改后的较短版本。


    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。因此,我不想仅仅针对真或假进行测试,而是确保正确的案例是他的。

我无法通过当前编码的方式找出一种方法。我的这个类的测试文件正在创建一个新的实例,我试图监视这些方法,但这没有用,因为它们没有在这个代码中的实际实例上调用,它们在本地调用。间谍有可能这样做吗?如果没有,以这种方式测试的推荐方法是什么?

1 个答案:

答案 0 :(得分:0)

这不起作用吗?

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();