用我的AngularJS测试代替茉莉花节点的业力?

时间:2013-12-22 10:20:32

标签: node.js angularjs jasmine karma-runner jasmine-node

Jasmine AngularJS测试(传入karma start configs/karma.conf.js

describe('IndexController', function () {
    beforeEach(module('myApp'));

    var ctrl, scope;

    beforeEach(inject(function ($controller, $rootScope) {
        scope = $rootScope.$new();
        ctrl = $controller('IndexController', {
            $scope: scope
        });
    }));

    it('should add name parameter to scope', function () {
        expect(scope.name).toBeDefined();
    });
});

controllers.js

的内容
var myApp = angular.module('myApp', []);

myApp.controller('IndexController', function ($scope) {
        $scope.name = 'bob';
});

输出:jasmine-node test/ --junitreport

   Message:
     TypeError: object is not a function
   Stacktrace:
     TypeError: object is not a function
    at null.<anonymous> (/tmp/tests/test/unit/controllerSpec.js:38:16)
    at Object.<anonymous> (/tmp/tests/test/unit/controllerSpec.js:36:1)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)

2 个答案:

答案 0 :(得分:0)

beforeEach()接受一项功能。请确保module('myApp')inject(...)返回实际的函数定义。 Jasmine的beforeEach就像“在每次测试之前调用传递的函数”,所以你可能想要:

beforeEach( function(){ module('myApp') } );

我对业力不熟悉,但在done()中使用茉莉花的beforeEach()方法是这样的:

var valueForEachTest = null;
beforeEach( function(done) {
  doSomething( function(value){
    valueForEachTest = value;
    done();
  });
} );

不使用done()调用会破坏我的测试,因为我在那里进行了一些异步调用(也许Jasmine不等待beforeEach完成?)。

答案 1 :(得分:0)

Angular在浏览器中运行。它不会在节点中运行。至少,不是没有a lot of effort

已尝试port it to node,但该项目的目的是为搜索引擎优化渲染角度页面服务器端。除非你有充分的理由,否则你不应该尝试在Node中测试Angular应用程序。