Angular 服务测试出了什么问题?

2024-03-31

我有一个调用外部网络服务的服务:

angular.module('myApp.services', [])
.service('autoCmpltDataSvc', function ($http) {
    var innerMatch = function (data) {
        return $.map(data, function (item) {
            return {
                fullName: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
                shortName: item.name,
                itemId: item.geonameId
            };
        });
    };

    this.fetchFromGeonamesDb = function (request, response, matcher) {
        $http({
            method: 'jsonp',
            url: 'http://ws.geonames.org/searchJSON?callback=JSON_CALLBACK',
            params: {
                featureClass: "P",
                style: "full",
                maxRows: 12,
                name_startsWith: request.destName
            }
        }).success(function (data, status) {
            console.log(data);
            response($.map(innerMatch(data.geonames), matcher));
        });
    };
});

我正在尝试测试它是否正确形成输出,因此我模拟了对真实 Web 服务的调用。 这是我的单元测试。

describe('Services', function () {

    beforeEach(module('myApp.services'));

    describe('autoCompleteService', function () {
        var $httpBackend, svc;
        var results = [];
        var matcher = function (item) {
            return item;
        };
        var response = function (arr) {
            results = arr;
        };

        beforeEach(inject(function ($injector, autoCmpltDataSvc) {
            svc = autoCmpltDataSvc;
            $httpBackend = $injector.get('$httpBackend');
            $httpBackend.whenJSONP(/searchJSON/).
              respond([
              { name: 'City1', adminName1: 'Region1', countryName: 'Country1', geonameId: 1 },
              { name: 'City2', countryName: 'Country2', geonameId: 2}]);
        }));

        afterEach(function () {
            $httpBackend.verifyNoOutstandingExpectation();
            $httpBackend.verifyNoOutstandingRequest();
        });

        it('should return values', function () {
            $httpBackend.expectJSONP(/searchJSON/);
            svc.fetchFromGeonamesDb({ 'destName': 'fra' }, response, matcher);
            $httpBackend.flush();
            expect(results.length).toBe(2);
        });
    });
});

但测试会产生错误。

         TypeError: Cannot read property 'length' of undefined
            at Function.v.extend.map (C:/Users/kmukhort/Documents/_files/TMate/A
ngularTest/app/lib/jquery-1.8.3.min.js:2:15334)
            at innerMatch (C:/Users/kmukhort/Documents/_files/TMate/AngularTest/
app/js/services.js:8:18)

我认为模拟响应有问题,因为它似乎没有返回数组。 但我不明白为什么它不返回数组。

提前致谢!


由于彼得·培根·达尔文,我的愚蠢错误被发现了。

好的,所以您的成功函数期望您的 http 调用返回一个 具有名为 geonames 的字段的对象,当前您的模拟正在返回 一个直阵列。

也许你应该将你的模拟更改为这个?

> $httpBackend.whenJSONP(/searchJSON/).
>               respond( { geonames: [
>                 { name: 'City1', adminName1: 'Region1', countryName: 'Country1', geonameId: 1 },
>                 { name: 'City2', countryName: 'Country2', geonameId: 2}]
>               });

https://groups.google.com/forum/#!topic/angular/u-fYR-AC8Ec https://groups.google.com/forum/#!topic/angular/u-fYR-AC8Ec

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 服务测试出了什么问题? 的相关文章

  • 从前台服务的活动中释放内存

    我有一个带有前台服务和一项活动的应用程序 该服务可以在启动时自行启动 也可以从 Activity 中启动 我注意到当服务在启动时自行启动时 内存使用量约为 3MB 一旦我打开该 Activity 内存使用量就会跃升至约 9mB 一旦 Act
  • 如何对嵌套函数进行单元测试? [复制]

    这个问题在这里已经有答案了 您将如何对嵌套函数进行单元测试f1 在下面的例子中 def f def f1 return 1 return 2 或者需要测试的函数不应该嵌套吗 有一个类似的问题这个链接 https stackoverflow
  • 如何打开定位服务

    当有人第一次拒绝时 如何从实际应用程序重新打开定位服务 我可以选择关闭或打开它 您只能提示他们在屏幕上打开定位服务 如下所示 UIApplication sharedApplication openURL NSURL URLWithStri
  • 如何在量角器中模拟拖放动作?

    我有一个双滑块 我想测试它是否可操作并返回正确的数据 滑块有一个最小和一个最大处理程序 它还有一些 我可以挂钩的断点 我想要模拟的是 handler max 元素的 touchStart 将拇指移动到类为 step 3 的元素上 handl
  • 尽管极其懒惰,但如何在 Python 中模拟 IMAP 服务器?

    我很好奇是否有一种简单的方法来模拟 IMAP 服务器 例如imaplib模块 在Python中 without做很多工作 是否有预先存在的解决方案 理想情况下 我可以连接到现有的 IMAP 服务器 进行转储 并让模拟服务器在真实的邮箱 电子
  • 使用覆盖率信息测试 Go 中的 os.Exit 场景 (coveralls.io/Goveralls)

    这个问题 如何在 Go 中测试 os exit 场景 https stackoverflow com questions 26225513 how to test os exit scenarios in go 以及其中得票最高的答案 列出
  • 如何使用 PowerMock 模拟返回 void 的静态方法?

    我的项目中有一些静态 util 方法 其中一些只是传递或抛出异常 有很多关于如何模拟返回类型不是 void 的静态方法的示例 但是我如何模拟一个将 void 返回为 的静态方法 doNothing 非空版本使用以下代码行 PrepareFo
  • 如何模拟从抽象类继承的受保护子类方法?

    如何使用 Mockito 或 PowerMock 模拟由子类实现但从抽象超类继承的受保护方法 换句话说 我想在模拟 doSomethingElse 的同时测试 doSomething 方法 抽象超类 public abstract clas
  • $resource.query 返回分割字符串(字符数组)而不是字符串

    我正在使用像下面这样的 Angular resource angular module app factory data function resource var Con resource api data update method P
  • 仅当显式选择行时才关闭 ui-bootstrap typeahead

    我创建了这个jsBin http jsbin com livuqafe 2 edit来证明我遇到的问题 如果您转到此处 请尝试输入 五 并继续 你的自然反应是输入 五 然后按 Tab 如果你想要 五百 你可以向下箭头一次 但是 在这种情况下
  • Angular 2和Jasmine单元测试:无法获取innerHtml

    我正在使用测试组件 WelcomeComponent 的示例之一 import Component OnInit from angular core import UserService from model user service Co
  • Chrome 中的性能问题

    我目前正在从事一个相对较大的项目 使用 AngularJs 构建 应用程序的一部分是一个表单 您可以向其中添加任意数量的页面 不幸的是 添加了很多不必要的垃圾 即表示表单模型的对象可能会变得非常大 在某些时候 Chrome 基本上无法处理它
  • 如何制作没有 ng-repeat 的模板并使用 Angular-drag-and-drop-lists 将数据传递到 $scope?

    我想用角度拖放列表 https github com marceljuenemann angular drag and drop lists使用我自己的网格模板到所见即所得编辑器 如何构建我自己的 HTML 模板而不需要ng repeat因
  • 如何在 angular-ui 中动态禁用 ui-sortable 指令

    我正在使用 Angular ui 使用 ui sortable 指令进行排序 是否可以根据范围状态动态启用 禁用可排序功能 因此 我需要一个按钮来更改范围属性的状态 并且根据此属性可排序是否应该工作 角度指令支持观察可排序选项何时发生变化
  • 应用程序被终止时 Android 后台服务正在重新启动

    我正在开发一个应用程序 其中创建后台服务来收集传感器数据 我从我的活动开始服务 startService new Intent this MyService class 我创建了该服务 因此如果应用程序被销毁 后台服务仍会继续收集数据 我尝
  • scala play框架如何对异步控制器进行单元测试

    使用 Scala play 2 5 版并尝试遵循以下文档中的单元测试控制器指南 https www playframework com documentation 2 5 x ScalaTestingWithScalaTest https
  • 语法错误:意外的静态标记

    我目前正在尝试评估与 React 配合使用的不同测试框架 结果发现 Jest 就在我的列表中 但是 我尝试使用此处概述的静态属性 https github com jeffmo es class fields and static prop
  • 如何在点击时添加和删除活动类 - 角度方式

    我正在这样做 div class tiles div 控制器 scope select function item scope selected item scope isActive function item return scope
  • 如何从CDN注入外部JS到Jest单元测试?

    我有 npm 和 webpack 的反应应用程序 我正在尝试向其添加单元测试 我使用的是包含在我的index html 中的CDN 的jQuery 而不是使用节点模块 我在组件中使用 jQueryTest1我向其中添加了单元测试用例 现在
  • 如何在 Rails 测试中填充查找表

    我在用Cucumber RSpec and 工厂女工用于测试我的 Rails 应用程序 但我有几个查找表 其中大部分包含static数据 所以我试图找出测试时填充这些的最佳方法 单独做它们FactoryGirl看起来很乏味 我想远离固定装置

随机推荐

  • 使用 JavaScript 打开另一个 html 页面时传递变量

    这可能是一个非常愚蠢的问题 但我在网上找不到它 而且我已经寻找了至少一个小时 我有一个链接 a href MusicMe html Instruments a 我想在单击后获取它的 ID 因为我需要将一些变量传递到我打开的页面以知道仪器链接
  • 2 个 2D 向量的叉积

    任何人都可以提供一个返回叉积的函数的示例TWO二维向量 我正在尝试实施这个算法 http www blackpawn com texts pointinpoly default html C 代码会很棒 谢谢 EDIT 找到了另一种适用于
  • 查找 NxN 网格中所有路径的算法

    想象一个机器人坐在 NxN 网格的左上角 机器人只能向两个方向移动 向右和向下 机器人有多少种可能的路径 我可以在谷歌上找到这个问题的解决方案 但我对解释不是很清楚 我试图清楚地理解如何解决这个问题并用Java实现的逻辑 任何帮助表示赞赏
  • Android 自定义视图应扩展 AppCompatTextView

    我创建了简单的自定义视图 它扩展自TextView 在 Android Studio 中我收到此警告 This custom view should extend android support v7 widget AppCompatTex
  • 独立移动应用程序上的 WebRTC

    我知道WebRTC是为浏览器设计的 但是可以直接在移动应用程序上使用WebRTC库吗 Thanks 截至5月14日here https github com pchab AndroidRTC是一个android项目 使用WebRTC效果很好
  • 为什么我不能在 kotlin 中使用 lambda 接口? [复制]

    这个问题在这里已经有答案了 看 我有一个 Java 类 public final class JavaReceiveSingle public static void useSingle Single single single doSth
  • 为什么仅当我在 SDL2 中设置非零 Alpha 大小时才获得 sRGB 帧缓冲区?

    我正在尝试通过以下方式以伽玛正确的方式渲染典型的 OpenGL 颜色三角形本指南 https learnopengl com Advanced Lighting Gamma Correction并查阅 SDL2 文档 了解如何在默认帧缓冲区
  • 在类似热图的图中写入值,但对于seaborn中的分类变量

    我在类似热图的图中绘制了一个数据框 我想写入单元格 但不是单元格的值 但我将该值与条件进行比较并告诉它是哪种错误 例如 import pandas as pd import seaborn as sns matplotlib inline
  • 在 Android 模拟器中不使用 -writable-system 时,Hosts 文件中的更改会丢失

    我通过使用标志 writable system 启动模拟器来更新 Android 模拟器中的 system etc hosts 文件 emulator exe avd tablet writable system 当我在没有 writabl
  • Redshift 中“ADD COLUMN IF NOT EXISTS”的解决方法

    我正在尝试通过 Spark Redshift 执行 S3 复制操作 并且希望在运行复制命令之前修改 Redshift 表结构 以便添加任何缺失的列 它们应该都是 VARCHAR 我能做的是在运行副本之前发送一个 SQL 查询 所以理想情况下
  • inputStream 和 utf 8 有时显示“?”人物

    所以我已经处理这个问题一个多月了 我还通过谷歌检查了几乎所有可能的相关解决方案 但我找不到任何真正解决我的情况的东西 我的问题是我正在尝试从网站下载 html 源代码 但在大多数情况下我得到的是某些文本显示一些 其中的字符 很可能是因为该网
  • 定义类型别名

    我发现 Pascal 的一个非常有用的功能是能够命名数据类型 例如 type person record name string age int end var me person you person etc 你能在 C 中做类似的事情吗
  • jQuery Unslide - 触摸不起作用

    我已经解决了这个问题 我发帖只是为了帮助其他人节省一些时间 我正在将 unslider 用于商业网站 这是一个我正在制作的响应式网站 因此向滑块添加触摸支持的功能很有吸引力 不幸的是 正如作者声称的那样 它不能直接开箱即用 UPDATE我使
  • 学习游戏开发,有什么书推荐吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 通过 SSH 执行 sudo 的正确方法是什么?

    我有一个脚本 它通过 SSH 在远程服务器上运行另一个脚本sudo 但是 当我输入密码时 它会显示在终端上 否则它工作正常 ssh user server sudo script 执行此操作的正确方法是什么 以便我可以输入密码sudo通过
  • 使用 Windows 服务手动实现 IoC

    我是 IoC 的新手 因此一直在遵循 Jeffery Palermo 在他的帖子中提供的示例http jeffreypalermo com blog the onion architecture part 1 http jeffreypal
  • SQL:限制链接到每个连接行的行

    我有某些情况需要 MySQL 查询的某些结果集 让我们先看看当前的查询 然后问我的问题 SELECT thread dateline AS tdateline post dateline AS pdateline MIN post date
  • Python 中(大)1554 x 1554 矩阵的行列式

    我需要在 python 中计算单精度的大型 1554 1554 值矩阵的行列式 这样做时我遇到了运行时警告 import numpy as np from numpy import linalg as LA a np random rand
  • 我可以在不使用 npm、VS、Node 等而只使用 JS 代码本身的情况下转换 ES6-ES5 吗?

    我试图让 Firefox 在 ES6 中运行 Promise 但遇到了触发错误的 let 关键字 语法错误 let 是保留标识符 更改脚本标签以包含 类型 应用程序 javascript 版本 1 7 没有用 所以我正在寻求转换代码 我的情
  • Angular 服务测试出了什么问题?

    我有一个调用外部网络服务的服务 angular module myApp services service autoCmpltDataSvc function http var innerMatch function data return