将构造函数中的一个参数传递给单元测试

时间:2016-12-28 20:02:54

标签: angularjs jasmine

我试图在我的单元测试中获取/设置“testModel.number”,但我似乎无法得到它。当我运行测试时,我收到此错误消息:

Pending exception java.lang.ClassNotFoundException: Didn't find class "com.my_app.Utils" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/system/lib, /vendor/lib, /system/lib, /vendor/lib]]

这是控制器:

Error: [$injector:unpr] Unknown provider: testModelProvider <- testModel

以下是单元测试:

angular.module("TestApp", [])
    .controller("IndexController", function ($scope, testModel) {
        $scope.name = "test";

        testModel = {
            number: 0
        }

        if (testModel.number === 1) {
            $scope.name = "test1";
        } else {
            $scope.name = "test2";
        }
    });

我对单元测试相当新,所以任何建议都会很棒!提前谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您需要将testModel对象传递给创建控制器的方法。 Jasmine不知道如何注入自定义提供程序。

describe('IndexController', function () {
    var scope, createController;

    beforeEach(module("TestApp"));

    beforeEach(inject(function ($rootScope, $controller) {
        scope = $rootScope.$new();

        createController = function (testModel) {
            return $controller('IndexController', {
                '$scope': scope,
                'testModel': testModel
            })
        }
    }));

    it('example test', function () {
        var testModel = { number: 1 };
        var controller = createController(testModel);

        expect(scope.name).toBe('test1');
    });
});

如果您将有多个需要testModel对象的测试,您还可以在全局级别定义它,如下所示:

describe('IndexController', function () {
    var scope, createController;
    var testModel = { number: 1 };

    beforeEach(module("TestApp"));

    beforeEach(inject(function ($rootScope, $controller) {
        scope = $rootScope.$new();

        createController = function () {
            return $controller('IndexController', {
                '$scope': scope,
                'testModel': testModel
            })
        }
    }));

    it('example test', function () {

        var controller = createController();

        expect(scope.name).toBe('test1');
    });
});