单元测试 – 使用Mocha和Chai测试Angular

我想用Yeoman测试我的角度应用程序,它使用Mocha和Phantom和Chai进行断言.

但是,当我运行任何样本测试用例时,测试用例运行不正常,显示PhantomJs由于缺少Mocha run()调用而超时.非角度案例在测试用例中工作正常.

<!doctype html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <title>Mocha Spec Runner</title>
  <link rel="stylesheet" href="lib/mocha/mocha.css">
</head>
<body>
  <div id="mocha"></div>
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js"></script>
  <script src="lib/mocha/mocha.js"></script>
  <script>mocha.setup('bdd')</script>
  <script src="lib/chai.js"></script>
  <script>
      expect = chai.expect;
      assert = chai.assert;
  </script>
    <script>
        function addSum(num1, num2) {
            return num1 + num2;
        }
    </script>
  <script>
  (function() {
    describe('Give it some context', function() {
        it('should simulate promise', inject(function ($q, $rootScope) {
            assert.notStrictEqual(3, '3', 'no coercion for strict equality');
         /*   var deferred = $q.defer();
            var promise = deferred.promise;
            var resolvedValue;

            promise.then(function(value) { resolvedValue = value; });
            expect(resolvedValue).to.be.undefined;

            // Simulate resolving of promise
            deferred.resolve(123);
            // Note that the 'then' function does not get called synchronously.
            // This is because we want the promise API to always be async, whether or not
            // it got called synchronously or asynchronously.
            expect(resolvedValue).to.be.undefined

            // Propagate promise resolution to 'then' functions using $apply().
            $rootScope.$apply();
            expect(resolvedValue).to.equal(123);*/
        }));
    });
  })();
  </script> 



  <!-- trigger the mocha runner -->
  <script src="runner/mocha.js"></script>

</body>
</html>

最佳答案 你尝试过使用量角器吗?它专为测试端到端angularjs应用程序而开发(由angularjs团队提供).
https://github.com/angular/protractor

它有自己的跑步者,你可以安装:

npm install protractor -g

然后执行跑步者:

protractor /configfile.cfg

不需要HTML页面来运行测试.

配置文件非常简单(您可以在源代码中看到选项).

有了它,您将规范定义为:

// myTest.js
describe('angularjs homepage', function() {
    it('should greet the named user', function() {
        browser.get('http://www.angularjs.org');
        element(by.model('yourName')).sendKeys('Julie');

        var greeting = element(by.binding('yourName'));

        expect(greeting.getText()).toEqual('Hello Julie!');
      });
});
点赞