我试图拦截我的Angular2 +应用程序在我的黄瓜测试中发出的http请求。我尝试使用nock
但没有成功。我不相信诺克正在拦截我的http电话。我在下面的代码中遗漏了什么?
我有一个服务类来进行REST调用:
@Injectable()
export class RestService {
getTestdata() {
this.http.get<ITestData>('/info/testdata', { observe: 'response' })
.catch(this.handleError)
.subscribe(response => this._testData.next({ ...response.body }));
}
}
在我的黄瓜测试文件中,我这样做:
import { browser, element, by, protractor } from 'protractor';
import { of } from 'rxjs/observable/of';
import * as testData from '../../utilities/data/testData.json';
const { Before, After, Given, When, Then, defineSupportCode } = require('cucumber');
const chai = require('chai').use(require('chai-as-promised'));
const expect = chai.expect;
const nock = require('nock');
defineSupportCode(function ({ setDefaultTimeout }) {
setDefaultTimeout(120 * 1000);
});
Before(() => {
nock('http://localhost:9084').log(console.log).get('/info/testdata').reply(200, of(testdata));
});
After(() => {
nock.cleanAll();
});
Given('something', (next: any) => {
next();
});
When('the user loads the page', (next: any) => {
testData['testKey1'] = false;
testData['testKey2'] = false;
browser.get('/').then(next());
});
Then('element is { displayed } to the user', (displayed: boolean, next: any) => {
const testElement = element(by.id('test-element'));
testElement .isPresent().then(response => {
expect(response).to.equal(displayed);
next();
});
});
只要使用browser.get('/')
加载页面,我的组件就会调用给定的端点。我认为调用没有被截获,因为testData
对象的键没有被更改(我更改了When
步骤中的值。我也做了console.log
并且它始终是原始的值,永远不会false
)。
此外,.log(console.log)
没有做任何事情。我什么都没看到。我究竟做错了什么?
我还能用其他东西吗?任何帮助将不胜感激,谢谢!