如何解决Electron + React + TestCafe MockRequest 拦截不起作用
我有一个电子应用程序,我正在尝试为其编写 e2e 测试,但是当涉及到 MockRequest 时,我似乎很挣扎,我在 testcafe 网站上关注了 the documentation 但无济于事,我的 api 调用似乎没有被拦截并尝试访问我设置的实际 API。
onChangeBetaCode = debounce(async input => {
// eslint-disable-next-line prefer-const
let { formError,formSuccess,betaCheckLoading,nextStepdisabled } = {
...this.state
};
const options = {
url: `${requestBase}/account/beta/verify`,method: 'post',headers: {
'Content-Type': 'application/json'
},data: {
vcode: input
}
};
if (!input) {
betaCheckLoading = false;
delete formSuccess.betacode;
formError.betacode = i18n.t('form.betaCoderequired');
this.setState({
betaCheckLoading,formError,nextStepdisabled: true
});
return;
}
delete formSuccess.betacode;
delete formError.betacode;
betaCheckLoading = true;
this.setState({ betaCheckLoading,formError });
try {
await axios(options);
betaCheckLoading = false;
formSuccess.betacode = true;
nextStepdisabled = false;
} catch (error) {
betaCheckLoading = false;
formError.betacode = i18n.t('register.betaCodeNotValid');
if (error.response && error.response.status !== 400) {
formError.betacode = error;
}
nextStepdisabled = true;
}
this.setState({
betaCheckLoading,nextStepdisabled
});
},500);
到目前为止,我的测试文件 Registration.e2e.ts
没什么奇怪的:
/* eslint jest/expect-expect: off,jest/no-test-callback: off */
import { getIn } from 'immutable';
import { waitForReact,ReactSelector } from 'testcafe-react-selectors';
import { Selector,RequestMock,RequestLogger } from 'testcafe';
const getInput = id => Selector('input').withAttribute('name',id);
const assertNoConsoleErrors = async t => {
const { error } = await t.getbrowserConsoleMessages();
await t.expect(error).eql([]);
};
const envapi = require('../../app/env_api.json');
const sdkUrl = envapi.test;
const registrationMock = RequestMock()
.onRequestTo(`${sdkUrl}/account/beta/verify`)
.respond(null,200,{
'access-control-allow-origin': `${sdkUrl}`
});
const getRegisterLink = () => Selector('[data-tid="goto-registration"]');
fixture`Login Screen`
.page('../../app/login_window/index.html')
.requestHooks(registrationMock)
.afterEach(assertNoConsoleErrors);
test('Register Link Exists',async t => {
await t.expect(getRegisterLink().innerText).eql('Register Instead');
});
test('Register new account',async t => {
await t.click(getRegisterLink()).typeText(getInput('betacode'),'908ee6111e').ok();
});
第一个测试通过没问题,第二个命中实际的 api 并且没有返回所需的 200 响应,它返回 400,它通知我要检查的 betacode 无效。
我已经尝试调试了几个小时,但无法弄清楚出了什么问题以及为什么 MockRequest 拦截不起作用???
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。