0

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)
4

2 回答 2

0

Angular 可以在浏览器中运行。它不会在节点中运行。至少,不是不费力气

已经尝试将其移植到 node,但该项目实际上是为了呈现角度页面服务器端以进行搜索引擎优化。除非你有充分的理由,否则你不应该尝试在 Node.js 中测试 Angular 应用程序。

于 2014-11-20T22:42:47.650 回答
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 完成?)。

于 2013-12-23T14:04:34.750 回答