使用Jasmine / Node测试Angular:未捕获的类型错误“无法设置'mock'的属性undefined

时间:2014-03-04 20:06:41

标签: javascript node.js angularjs unit-testing jasmine

我正在尝试创建“Angular.js in Action”中描述的Jasmine单元测试。该应用程序正常运行,但在尝试运行我的测试时,我在node.js命令提示符下不断收到此错误。

我的配置:

module.exports = function(config) {
config.set({

// base path, that will be used to resolve files and exclude
basePath: '',


// frameworks to use
frameworks: ['jasmine'],


// list of files / patterns to load in the browser
files: [

  'javascripts/angular.min.js',
  'javascripts/angular-mocks.js',
  'javascripts/app.js',
  'tests/angelloModelSpec.js',
  ],

我的index.html标题:

<head>
    <script src="javascripts/angular.min.js" type="text/javascript"></script>
    <script src="javascripts/angular-mocks.js"></script>
    <script src="javascripts/app.js"></script>


    <meta charset="utf-8">
    <title>Angello</title>
    <meta name="description" content="Angello Story Application">
    <link rel="stylesheet" href="app.css">
</head>

我的测试:

describe('Service: angelloModel', function(){

// load the service's module
beforeEach(module('Angello'));

var modelService;

// Initialize the service
beforeEach(inject(function (angelloModel){
    modelService = angelloModel;
}));

describe('#getStatuses', function(){
    it('should return seven different statuses', function () {
        expect(modelService.getStatuses().length).toBe(7);
    });
});
});
在命令提示符下输出

Your environment has been set up for using Node.js 0.10.26 (x64) and npm.

Your environment has been set up for using Node.js 0.10.26 (x64) and npm.

C:\Users\jmclaughlin>karma start karma.conf.js
INFO [karma]: Karma v0.10.9 server started at http://localhost:****/
INFO [launcher]: Starting browser Chrome
INFO [Chrome 33.0.1750 (Windows 7)]: Connected on socket ***************
Chrome 33.0.1750 (Windows 7) ERROR
    Uncaught TypeError: Cannot set property 'mock' of undefined
    at C:/Angello/javascripts/angular-mocks.js:17
Chrome 33.0.1750 (Windows 7): Executed 0 of 0 ERROR (0.465 secs / 0 secs)

使用每个文件的1.0.7版时:

Your environment has been set up for using Node.js 0.10.26 (x64) and npm.

C:\Users\myUsername>karma start karma.conf.js
INFO [karma]: Karma v0.10.9 server started at http://localhost:****/
INFO [launcher]: Starting browser Chrome
INFO [Chrome 33.0.1750 (Windows 7)]: Connected on socket ***************
Chrome 33.0.1750 (Windows 7) ERROR
    Uncaught ReferenceError: angular is not defined
    at C:/Angello/javascripts/angular-mocks.js:16
Chrome 33.0.1750 (Windows 7): Executed 0 of 0 ERROR (0.064 secs / 0 secs)

3 个答案:

答案 0 :(得分:14)

通常这是由于角度版本冲突,karma.conf.js中脚本定义的顺序错误,导入不完整或语法错误造成的。

由于我可以看到您正在测试服务,请在文件下包含该服务的js文件(除非它嵌入在app.js中)并删除错误放置的逗号(见下文):

files: [

'javascripts/angular.min.js',
'javascripts/angular-mocks.js',
'javascripts/app.js',
'<include your service js here>',
'tests/angelloModelSpec.js', <<-- and remove this trailing comma
],

答案 1 :(得分:2)

我发现了问题!我正在编辑错误的配置文件!我正在编辑app目录中的配置文件,但真正的配置文件位于C:\ Users \ myUsername \ karma.conf.js

感谢您的帮助!

答案 2 :(得分:0)

您必须将 angular.min.js 文件放在您自己的 app.js 文件之上的 angular-mocks.min.js 文件之上。

files: [
  'https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js',
  'https://cdnjs.cloudflare.com/ajax/libs/angular-mocks/1.8.2/angular-mocks.min.js',
  'https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js',
  'js/app.js',
  ...
],