- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个失败的测试,我不确定如何修复。我从 Jest 得到的错误消息似乎是矛盾的,问题与两个 Angular HttpTestingController 的行为有关。方法:verify()
和 expectOne()
。
有问题的测试,在其文件的上下文中:
import {TestBed, getTestBed} from '@angular/core/testing';
import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
import {PrintProjectsService} from './print-projects.service';
import {AppConfig} from '../../app.config';
describe('PrintProjectsService', () => {
let injector: TestBed;
let service: PrintProjectsService;
let appConfig: AppConfig;
let httpMock: HttpTestingController;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
providers: [PrintProjectsService, AppConfig]
});
injector = getTestBed();
service = injector.get(PrintProjectsService);
httpMock = injector.get(HttpTestingController);
appConfig = injector.get(AppConfig);
});
afterEach(() => {
httpMock.verify();
});
//This test passes
it('should make a GET request to retrieve a printable factory when provided a printable factory id', () => {
const id = '12345';
service.getPrintableFactory(id).subscribe();
const req = httpMock.expectOne(`${appConfig.API_URL}/api/printed-book/v1/printable-factories/${id}/`);
expect(req.request.method).toBe('GET');
});
// This is the one that fails
it('should make a GET request to retrieve cover image data from the cover service', () => {
const imageType = 'full';
service.getCoverImage(12345, '0850X1100FCSTDCO080CW444GXX', imageType).subscribe();
//httpMock.verify(); //this finds a GET at undefined/cover/api/cover-images/full
const req = httpMock.expectOne(`${appConfig.API_URL}/cover/api/cover-images/${imageType}`);
expect(req.request.responseType).toBe('blob');
});
});
Jest 返回此错误消息:
● PrintProjectsService › should make a GET request to retrieve cover image data from the cover service
Expected one matching request for criteria "Match URL: undefined/cover/api/cover-images/full", found none.
44 | service.getCoverImage(12345, '0850X1100FCSTDCO080CW444GXX', imageType).subscribe();
> 45 | const req = httpMock.expectOne(`${appConfig.API_URL}/cover/api/cover-images/${imageType}`);
46 | expect(req.request.responseType).toBe('blob');
at HttpClientTestingBackend.Object.<anonymous>.HttpClientTestingBackend.expectOne (node_modules/@angular/common/bundles/common-http-testing.umd.js:435:19)
at src/app/services/print-projects/print-projects.service.spec.ts:45:26
...
at Object.testBody.length (node_modules/jest-zone-patch/index.js:50:27)
● PrintProjectsService › should make a GET request to retrieve cover image data from the cover service
Expected no open requests, found 1: GET undefined/cover/api/cover-images/full
23 | afterEach(() => {
> 24 | httpMock.verify();
25 | });
错误消息中 URL 变量呈现为 undefined
的事实是无关紧要的 - 在通过的测试中也是如此。
令我困惑的是,当测试中到达expectOne()
时,找不到undefined/cover/api/cover-images/full
的请求,但在测试之后,verify()
在 相同 URL 处发现了一个 GET 请求:undefined/cover/api/cover-images/full
。 verify()
还在 expectOne()
.
为什么 expectOne()
没有捕获到请求,而 verify()
却捕获了请求?错误消息没有告诉我我需要的一切吗?无论我运行 jest
还是 jest --verbose
,我似乎都会收到相同的错误消息。
最佳答案
我找到了解决此问题的方法,使用从此处收集的 expectOne()
变体:https://github.com/thymikee/jest-preset-angular/blob/master/example/src/app/service/hero.service.spec.ts#L59
这是通过测试的新版本:
it('should make a GET request to retrieve cover image data from the cover service', () => {
const imageType = 'full';
service.getCoverImage(12345, '0850X1100FCSTDCO080CW444GXX', imageType).subscribe();
const req = httpMock.expectOne((request: HttpRequest<Blob>) => {
return request.url === `${appConfig.API_URL}/cover/api/cover-images/${imageType}`;
});
expect(req.request.method).toBe('GET');
// the original `expect()` below also passes, but since we already state that the request will return a Blob above, the `expect()` above is a better option
// expect(req.request.responseType).toBe('blob');
});
看起来好像 expectOne()
的 url
只匹配版本,正如最初使用的那样,期望一个 JSON
响应默认。无论如何,这个特定调用的 Blob
响应类型似乎是问题的根源。
关于Angular w/Jest : `verify()` vs .`expectOne()` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52206486/
验证邮箱的正则表达式 var ePattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; 或者
我正在学习正则表达式并认为我开始掌握了。但是…… 我试图拆分一个字符串,我需要帮助来理解这样一个简单的事情: String input = "abcde"; System.out.println("[
我是初学者。我不知道为什么?我正在使用 Code::Blocks。请阅读以下代码: 如果 q=' W ',则打印出 W。 如果 q=" W ",则打印出 $。 最佳答案 文字 "W" 不是单个 cha
我在 BigQuery Reference 或 re2 wiki 中都找不到答案。 在 BigQuery Reference 中 Regex 部分的所有示例中,每个 regex 之前都有一个“r”,但
当我按“W 或 w”但仅一次时,我想让我的矩形/字符移动“X px”。按住“W”和“w”时不继续移动。我尝试使用一个变量创建一个“Key Released”函数,该变量在按下“W 或 w”时会发生变化
%w[ ] Non-interpolated Array of words, separated by whitespace %W[ ] Interpolated Array of words
我使用 vim。在我曾经使用过的每台机器上,“w”都尊重标点符号。如果我按“w”,我会前进到一个词的结尾。 如果是句点分隔词,我将移至下一个句点。 然而,在特定的 vim 安装中,'w' 被解释为 '
(\w+)?有什么区别吗和 (\w*)在正则表达式中? 似乎是一样的,不是吗? 最佳答案 (\w+)?和 (\w*)两者匹配相同(0..+inf 单词字符) 但是,有一点不同: 在第一种情况下,如果正
在 Ruby 中 %w(don matt james) 和 %w[don matt james] 有区别吗? 使用 Ruby 控制台,它们都输出一个数组,每个单词作为一个元素。我很好奇为什么有多种方法
我真的很想帮助您决定字母表中所有单词的语言是否{0,1}不能从两边以同样的方式读取,{ w | w <> wR } , 是一种上下文无关语言(即可以转化为特定的语法规则)。 我试图通过抽水引理证明它不
这是我的 Xml 文档(小片段)。
:q 和 :Q 也是如此。我几乎总是不会足够快地放弃转变,看到 :Q 和 :W 无论如何都没有被使用,我认为让它们像小写字母一样做会很好。 最佳答案 黑客是通过 :cmap或 :cabb ,但这些都有
我对/\w\b\w/感到困惑。我认为它应该匹配“we we”中的“e w”,因为: \w 是单词字符,即“e” \b 是单词 broundary,它是 ""(空格) \w 是另一个词是“w” 所以匹配
在 Linux 中,我的目录中有一个名为 test2 的文件,该文件是我使用 touch 命令创建的。 当我运行命令时 find . –name “*test*” -ls 它不会给我错误,但是当我运行
我想把一个句子分成单词和单词之间的部分(我称之为定界符)。 sentence = "First-tea,-then-coffee!" => "First-tea,-then-coffee!" word
我正在查看 Ruby 的文档。我对使用 %w() 还是 %W() 感到困惑(后面的 W 是大写的)。两者有什么区别?你能给我指点一些文档吗? 最佳答案 当大写时,数组由插入的字符串构成,就像在双引号字
有什么区别? 最佳答案 %w 引用像单引号 ''(没有变量插值,转义序列更少),而 %W 引用像双引号 ""。 irb(main):001:0> foo="hello" => "hello" irb(
这是运行 XQueries 之前的 XML 文档示例: ... 1.7 ****
除非我为 TableTypeCarrier 模板类包含一个复制构造函数,否则使用 clang(但不是 gcc)构建时,以下代码会在运行时崩溃吗?如果我包含该复制构造函数,为什么我在使用 gcc 构建时
尝试: time perl -E '$x="a" x 100000; $x =~ /[\w\W]+x/i' 将运行很长时间(在我的笔记本上20秒)。没有/i,例如 time perl -E '$x=
我是一名优秀的程序员,十分优秀!