Angular 2 模拟响应不起作用

2024-04-10

我有以下 Angular 2 测试:

/* tslint:disable:no-unused-variable */

import { provide  } from '@angular/core';
import { MockBackend  } from '@angular/http/testing';

import {
  Http,
  HTTP_PROVIDERS,
  Response,
  ResponseOptions,
  BaseRequestOptions,
  ConnectionBackend,
  XHRBackend

} from '@angular/http';

import {
  beforeEach, beforeEachProviders,
  describe, xdescribe,
  expect, it, xit,
  async, inject

} from '@angular/core/testing';

import { BookService  } from './book.service';

describe('Book Service', () => {
  beforeEachProviders(() => [
    BookService,
    HTTP_PROVIDERS,
    MockBackend,
    BaseRequestOptions,
    { provide: XHRBackend, useExiting: MockBackend  },
    provide(Http, {
        useFactory: function (backend:ConnectionBackend, defaultOptions:BaseRequestOptions) {
        return new Http(backend, defaultOptions);
      },
      deps: [MockBackend, BaseRequestOptions]
    })
  ]);

  it('should assign a list of books', inject([BookService, MockBackend, Http], (service, backend, http) => {
     var response;

     backend.connections.subscribe(c => {
       expect(c.request.url).toEqual('/api/books.json');
       c.mockRespond(new Response(new ResponseOptions({body: {message: 'thank you'}})));

       });

     http.get('/api/books.json').subscribe(data => response = data);

     expect(response).toEqual({ message: 'thank you'  });

  }));

});

我想重点关注的部分是:

  it('should assign a list of books', inject([BookService, MockBackend, Http], (service, backend, http) => {
     var response;

     backend.connections.subscribe(c => {
       expect(c.request.url).toEqual('/api/books.json');
       c.mockRespond(new Response(new ResponseOptions({body: {message: 'thank you'}})));

       });

     http.get('/api/books.json').subscribe(data => response = data);

     expect(response).toEqual({ message: 'thank you'  });

  }));

当我运行测试时,我得到:

Expected Response with status: null null for URL: null to equal Object({ message: 'thank you' }).

认为这可能是一个异步问题,我将我的期望更改为:

http.get('/api/books.json').subscribe(data => {
   expect(data).toEqual({ message: 'thank you'  });
});

但我仍然收到同样的失败消息。

我该怎么做才能使模拟响应生效?


这是解决方案。我只需要改变

http.get('/api/books.json').subscribe(data => {
   expect(data).toEqual({ message: 'thank you' });
});

to

http.get('/api/books.json').subscribe(data => {
   expect(data.json()).toEqual({ message: 'thank you' });
});

所以我所要做的就是添加.json()部分并且它起作用了。

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

Angular 2 模拟响应不起作用 的相关文章

随机推荐

  • Perl 构造函数应该返回 undef 或“无效”对象吗?

    Question 什么被认为是 最佳实践 and why 处理构造函数中的错误 最佳实践 可以引用 Schwartz 的话 或者 50 的 CPAN 模块使用它 等等 但我对任何人提出的合理意见感到满意 即使它解释了为什么常见的最佳实践并不
  • 无法在 Primefaces RequestContext.execute() 调用中显示对话框

    我有一个选项卡视图 只要用户选择该选项卡 我就想在其中刷新该选项卡的内容 我还希望在刷新选项卡时弹出模式对话框 这是带有 tabChange ajax 事件处理程序的 tabView
  • 日语/字符的编程技巧[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个想法 可以编写一些网络应用程序来帮助我 也许还有其他人 更好地学习日语 因为我正在学习日语 我的问题是该网站主要是英文的 所以
  • 从 for 循环 Python 将数字列表打印为数组

    使用下面的代码 它会一一打印值 phase 我正在尝试将这些值打印为 for 循环之外的数组 import math Period 6 2 time1 datafile1 0 magnitude1 datafile1 1 for i in
  • Swift REPL:如何保存/加载 REPL 状态? (又名挂起/恢复、快照、克隆)

    在 Swift REPL 中 保存 REPL 状态的方法是什么 例如 我想在 REPL 中做一堆工作 然后保存它 以便稍后加载 这个概念可能被命名为保存 加载 挂起 恢复 快照 克隆 序列化 反序列化等 任何让我实现这一目标的解决方案都会有
  • python中的单词排序

    在Python中是否可以不根据英语字母表而是根据自己创建的字母表对单词列表进行排序 您通常可以定义自定义比较方法 以便在您的限制范围内执行排序 我一生中从未编写过一行 Python 代码 但它与 Ruby 非常相似 让我注意到以下摘录自这一
  • gluUnProject Android OpenGL ES 1.1 用法

    我正在尝试使用 gluUnProject 将 Windows 坐标转换为世界坐标 我不想在模拟器或旧版 Android 系统 使用 OpenGL ES v1 0 中获取工作示例 这不是关于 GL 函数可用性的问题 我正在尝试使用 OpenG
  • 逻辑或运算符与按位或运算符

    有谁知道为什么 if false true true System out println True else System out println False Print True if false true true System ou
  • 如何在 Rails 中发送简单的 json 响应?

    我需要发送 json 响应取决于用户在输入中输入的数据 但我无法发送简单的 json 请求 我关注了这篇文章 http paydrotalks com posts 45 standard json response for rails an
  • MSI 安装程序自定义操作身份问题

    我正在创建一个在数据库上执行脚本的自定义操作 问题是 connectios 使用集成安全性 因此当我尝试打开连接时出现错误 用户 Domain ComputerName 登录失败 当我检查自定义操作的身份时 使用System Securit
  • CSS属性在github中以红色突出显示

    The touch actionSCSS 文件中的属性在 Github diff 中以红色突出显示 有什么理由吗 这是它的 DOM 如果存在语法错误 Github 会突出显示这样的代码 它不是 100 准确 而且它实际上并没有运行您的代码
  • Meteor-AutoForm:如何根据另一个控件更新选择选项

    我一直在寻找一些问题的答案 这些问题应该非常简单 但我一生都无法弄清楚 基本上我有一个带有两个选择控件的meteor autoform
  • 在 Windows 7 上找不到模块“连接”

    请看下面 C Program Files nodejs gt npm g install connect npm http GET https registry npmjs org connect npm http GET https re
  • React Native + React Native Paper 应用程序中未显示图标

    这是一个新鲜的React Native应用程序使用React Native Paper 我按照以下说明进行操作https callstack github io react native paper getting started html
  • 无法实现 grunt-connect-proxy

    为了 http 127 0 0 1 9000 我得到的路线 不能获取 对于 v1 路线我得到 未找到 在此服务器上找不到请求的 URL v1 这是我的 Gruntfile js Generated on 2013 10 08 using g
  • 计算小于当前值的值的数量

    我想计算列中的行数input如果值小于当前行 请参阅下面想要的结果 对我来说 问题是条件基于当前行值 因此它与条件是固定数字的一般情况有很大不同 data lt data frame input c 1 1 1 1 2 2 3 5 5 5
  • 绑定这个更好还是使用变量更好? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • C# 无法从传输连接读取数据:现有连接被远程主机强制关闭。读取网络流

    我看过 无法从传输连接读取数据连接已关闭 https stackoverflow com questions 26995191 unable to read data from the transport connection the co
  • JavaFX 场景的显示随机延迟

    我创建了一个 JavaFX 应用程序 在 Ubuntu Java SE 运行时环境 版本 1 8 0 131 b11 上运行 并制作了一个简单的测试应用程序 public class DelayedSceneApplication exte
  • Angular 2 模拟响应不起作用

    我有以下 Angular 2 测试 tslint disable no unused variable import provide from angular core import MockBackend from angular htt