Javascript 使用Jasmine/Node测试角度:未捕获类型错误“;无法设置';模拟';未定义

Javascript 使用Jasmine/Node测试角度:未捕获类型错误“;无法设置';模拟';未定义,javascript,node.js,angularjs,unit-testing,jasmine,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 framework

我正在尝试创建“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',
  ],
My 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>
命令提示符中的输出:

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)

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

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

文件:[
“javascripts/angular.min.js”,
“javascripts/angular mocks.js”,
“javascripts/app.js”,
'',

“tests/angelloModelSpec.js”,我发现了问题!我编辑了错误的配置文件!我在app目录中编辑了一个配置文件,但真正的配置文件在C:\Users\myUsername\karma.conf.js中


谢谢您的帮助!

您必须按顺序将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',
  ...
],

AngularJS v1.0.7和mocks文件的来源:AngularJS v1.2.9将mocks版本更改为1.0.7,得到了不同的错误:“AngularJS未定义”这在我身上发生,对我来说,错误是同时使用bower和npm…该服务嵌入在app.js中。我删除了错误的逗号..Thank.angular.min.js应该定义window.angular={},angular mocks应该可以看到它。顺序是正确的,但不知何故它不起作用。检查chrome控制台/karma控制台,因为它可能没有正确加载angular.min.js。幸运的是,上面给出了一个答案…我编辑了错误的配置文件…出于某种原因,我在应用程序目录中打开了一个,而Jasmine的配置文件是looking for在C:\Users\myUsername\karma.conf.js中。不幸的是,这并没有向读者解释为什么首先会出现错误。正确的配置文件中没有定义Angular。
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
],
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',
  ...
],