这是我要实现的目标的基本版本。
由于我在函数中有一些等待,所以我使用private readonly Mock<IHttpClientFactory> _mockHttpClientFactory;
private readonly Mock<HttpClient> _mockHttpClient;
[Fact]
public void TestMethod_ValidHttpRequest_ReturnsTrue()
{
var httpClient = _mockHttpClient.Setup(x => x.SendAsync(It.IsAny<HttpRequestMessage>()))
.ReturnsAsync(new HttpResponseMessage()
{
StatusCode = HttpStatusCode.OK,
Content = new StringContent("[{'id':1,'value':'1'}]"),
});
var client = _mockHttpClientFactory.Setup(x => x.CreateClient()).Returns(httpClient); //DOESNT WORK
var service = new TestService(_mockHttpClientFactory);
var result = service.TestMethod("testdata");
Assert.True(result.Result)
}
async
但是表格最后提交。
我什至尝试添加e.preventDefault(),但这也不起作用。
都是因为$(document).on('submit', '.applicationForm', async function(e) {
do some validation
if (!valid) {
return true;
}
return false;
});
位吗?
答案 0 :(得分:1)
标记为async
的功能始终返回Promise,因此不会返回false
。
他们还立即返回,因此e.preventDefault
将因为执行得太晚而无法正常工作。
您不能等到异步代码运行后再取消事件。
相反:
async
函数e.preventDefault
the_form.submit()
)或
在用户与表单交互时进行验证。将标记设置为有效或无效。单击提交按钮后,检查标志的状态。
答案 1 :(得分:0)
一个异步函数将自动返回一个Promise,并且由于解析为false
的Promise与false
是不同的,因此该表单将提交-仅在false
正好返回将不提交表单。
始终返回false,如果通过验证,则手动提交表单:
$(document).on('submit', '.applicationForm', function(e) {
checkValidity(this);
return false;
});
async function checkValidity(form) {
// do some validation
if (valid) {
$(this).submit();
}
}