我的E2E
应用程序在Protractor-Jasmine
中编写了Angular2-TypeScript
测试,如下所示,
it("Perform Some Action", function() {
element(by.css('[ng-reflect-placeholder="Email"]')).sendKeys(test_email);
element(by.css('[ng-reflect-placeholder="Password"]')).sendKeys("pass");
element(by.css('[ng-reflect-placeholder="Confirm Password"]')).sendKeys("conf pass");
element(by.buttonText("CONTINUE")).click();
request.post(
'myAPIEndPoint',
{ json: { emailaddress: test_email,user: "user1",code: "1234" } },
function(error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body)
var info = JSON.parse(body);
//Do something
}
}
);
现在,我遇到的问题是,request.post
在它上面的语句之前被调用并导致我的测试失败,因为来自api post调用的响应只有在它上面的语句将具有值时才会有效在电话会议之前执行。
确保post-call
仅在执行上述语句后才能完成的正确方法是什么?
答案 0 :(得分:0)
出现问题是因为大多数量角器指令都是异步完成的。这同样适用于sendKeys()
和click()
。
你需要做两件事:
click()
承诺后的请求(在.then()
方法中)it('description', function(done){})
结构您的TC如下所示:
it("Perform Some Action", function(done) {
element(by.css('[ng-reflect-placeholder="Email"]')).sendKeys(test_email);
element(by.css('[ng-reflect-placeholder="Password"]')).sendKeys("pass");
element(by.css('[ng-reflect-placeholder="Confirm Password"]')).sendKeys("conf pass");
element(by.buttonText("CONTINUE")).click().then(()=> {
request.post(
'myAPIEndPoint',
{ json: { emailaddress: test_email,user: "user1",code: "1234" } },
function(error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body)
var info = JSON.parse(body);
//Do something
done();
}
}
);
});
});