理解AngularJS测试

理解AngularJS测试,angularjs,testing,karma-runner,Angularjs,Testing,Karma Runner,我似乎无法理解测试AngularJS应用程序的概念 我使用PHPstorm作为我的IDE,并通过node成功安装了node.js和karma 然后我创建了一个karma.config文件: module.exports = function(config) { config.set({ basePath: '', frameworks: ['jasmine'], files: [ 'js/angular.js', 'js/va.angular.js',

我似乎无法理解测试AngularJS应用程序的概念

我使用PHPstorm作为我的IDE,并通过node成功安装了node.js和karma

然后我创建了一个karma.config文件:

  module.exports = function(config) {
config.set({
  basePath: '',
  frameworks: ['jasmine'],
  files: [
      'js/angular.js',
      'js/va.angular.js',
    'test/**/**/*Spec.js'
  ],
  exclude: [

  ],
  reporters: ['progress'],
  port: 9876,
  colors: true,
  logLevel: config.LOG_INFO,
  autoWatch: false,
  browsers: ['C:/Program Files (x86)/Google/Chrome/Application/chrome.exe'],
  captureTimeout: 60000,
  singleRun: false
});
};
我还创建了一个测试文件:

// mainSpec.js
describe('controllers', function(){
beforeEach(angular.module('va'));

it('should friggin test something', inject(function() {
    var x = 5;
    expect(x.toBe(5));
}));
});
但是,当我尝试运行测试时,由于以下原因,测试失败:

TypeError: Object #<Object> has no method 'apply'
TypeError: Object 5 has no method 'toBe'
TypeError:对象#没有方法“apply”
TypeError:对象5没有方法“toBe”
现在我有两个问题:

  • 我做错了什么
  • 因果报应的东西从哪里得到茉莉花的东西?在我看来,它似乎无法得到它

确保在要加载的文件列表中包含
angular mocks.js
模块

当您在karma配置中指定
frameworks:['jasmine']
时,它包含jasmine,因此您无需自己包含它

至于你的错误

expect(x.toBe(5))
应该是:

expect(x).toBe(5)

确保在要加载的文件列表中包含
angularmocks.js
模块

当您在karma配置中指定
frameworks:['jasmine']
时,它包含jasmine,因此您无需自己包含它

至于你的错误

expect(x.toBe(5))
应该是:

expect(x).toBe(5)

非常感谢您!您是否介意简要解释一下angular-mocks.js的用途以及我在哪里可以找到它的模板?angular mocks是一组用于模拟angular的不同组件的功能。例如,如果要测试从服务器返回的数据是否正确填入对象中,可以模拟
$http
服务,使其返回虚拟数据,而不必调用实际的web服务。这可能会帮助您再次理解测试。我包括了它,还解决了toBe()上的错误,但我仍然为apply()获取了一个,而不是使用
angular.module
,或者使用
angular.mock.module
,或者只是简单地
module
angular.mock.module
将自身放在窗口对象上以方便)。您可能正在调用$scope.apply()而不是$scope.$apply(),测试将为您捕获该错误。非常感谢您!您是否介意简要解释一下angular-mocks.js的用途以及我在哪里可以找到它的模板?angular mocks是一组用于模拟angular的不同组件的功能。例如,如果要测试从服务器返回的数据是否正确填入对象中,可以模拟
$http
服务,使其返回虚拟数据,而不必调用实际的web服务。这可能会帮助您再次理解测试。我包括了它,还解决了toBe()上的错误,但我仍然为apply()获取了一个,而不是使用
angular.module
,或者使用
angular.mock.module
,或者只是简单地
module
angular.mock.module
将自身放在窗口对象上以方便)。您可能正在调用$scope.apply()而不是$scope.$apply(),测试将为您捕获该错误。