在测试状态配置时,如何模拟ui-router的解析值?

时间:2015-05-17 17:32:19

标签: angularjs unit-testing jasmine angular-ui-router

我正在使用ui-router编写一个角度应用程序,我正在为我的ui-router配置编写测试。

具体来说,我希望测试绑定到州的onEnteronExit回调。这些回调依赖于在状态上定义的解析。如何模拟onEnteronExit函数中使用的结果?

例如,假设我的状态定义如下:

// bobConfig.js
.state('bob', {
    url: '/bob',
    templateUrl: "bob.html",
    controller: "bobController",
    resolve: {
        currentUser: function() {
            return "Bob Bobbertson";
        }
    },
    onEnter: function(currentUser) {
        if(currentUser == "Bob Bobbertson") {
            console.log("hello bob!");
        } else {
            console.log("hey, you aren't bob!");
        }
    }
});

在此示例中,我想测试"hey, you aren't bob!"消息功能。

对于初学者,我写的是这样的:

// productsConfig.spec.js
describe("Products state config", function(){
    it("should tell everyone but bob that they aren't bob", function() {
        // set up currentUser to return "Sally Sallington"
        expectYouArentBobMessageToBePrinted();
    });
});

在上面的茉莉花测试示例中,我如何制作,以便我currentUser中使用的onEnter的值为"Sally Sallington"

1 个答案:

答案 0 :(得分:4)

您可以使用与其他Angular值/服务相同的方式模拟已解析的值。我用的是:

describe('Products state config', function() {
  beforeEach(function() {
    module('whatever.module', function($provide) {
      $provide.service('currentUser', function() {
        return 'Some User';
      });
    });
  });

  it('should do something ...', function() {
    // ...
  });
});

您甚至可以参考可以从每个单独测试中更改的变量。