使request.post按顺序执行

时间:2017-07-20 03:44:31

标签: angular typescript jasmine protractor e2e-testing

我的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仅在执行上述语句后才能完成的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

出现问题是因为大多数量角器指令都是异步完成的。这同样适用于sendKeys()click()

你需要做两件事:

  1. 解决click()承诺后的请求(在.then()方法中)
  2. 告知您的Jasmine异步作业已完成,并且可以继续使用其他套件(使用it('description', function(done){})结构
  3. 您的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();
                }
              }
            );
        });
    });