2014-10-02 28 views
0

我使用Behat測試來測試第三方Web服務以計費禮品卡。每個測試都會向網絡服務發送一個計費請求,並將餘額返回。我的功能中有沒有一種方法可以將預期響應作爲變量?例如:Behat功能 - 計算得出的預期值

  1. 致電取得卡餘額。
  2. 比爾卡5美元。預期餘額應爲原來的餘額減去5.
  3. 比爾卡10美元。預期的餘額應該是以前的餘額減去10.

我一直在使用「示例」方法來創建一個值的表傳遞到測試和預期的結果,但每次我執行一個測試,我有更新整個響應值表。我寧願只更新表中的第一個值,然後計算其餘值。這是可能的,如果是的話,如何?

下面是什麼,我希望能做到的例子:

| amount | result       | 
| 5 | 100        | 
| 10 | previous result - current amount | 

回答

0

它不是非常從你想要什麼的問題明確。如果這是您的功能中固定的值,那麼做到這一點的唯一方法就是從您的應用中設置初始餘額。通過'@beforeScenario'鉤子來做到這一點可能是最簡單的解決方案(因爲你不能每次都在場景大綱中這樣做)。

或者,如果您無法從套件中修改餘額,唯一合適的選擇是按照以下方式進行。這可能不像對實際價值的斷言那樣具體,但技術上這是同樣的事情。黃瓜語言(如果可以稱之爲語言)不允許任何操作和場景概述可能是其中最具活力的部分。

語境

protected $balance; 

/** 
* @Give /^I know the balance$/ 
*/ 
public function updateBalance() { 

    // API call to get the balance… 

    $this->balance = API::getBalance(); 
} 

/** 
* @When /^I bill the card for (\d+) dollars$/ 
*/ 
public function billCard($amount) { 

    // API call to bill the card… 

    API::billCard($amount); 
} 

/** 
* @Then /^the balance should reduce by (\d+) dollars$/ 
*/ 
public function assertBalance($amount) { 

    // API call to verify the balance was reduced correctly, don't forget to cast if necessary. 

    if ($this->balance - $amount === ($currentBalance = (int) API::getBalance())) { 
     $this->balance = $currentBalance; 
    } else { 
     throw new Exception(); 
    } 
} 

功能

Scenario Outline: … 
    Given I know the balance 
    When I bill the card for <amount> dollars 
    Then the balance should reduce by <amount> dollars 

    Examples: 
     | amount | 
     | 5  | 
     | 10 | 
+0

是的,這是我目前在做什麼。不幸的是,PM希望看到該功能的結果。她希望查看指定第一個值的結果列,並且後續值是上述結果減去金額列中的值。 – user3154922 2014-10-07 20:02:52

+0

這是否意味着這是你需要的還是意味着其他的東西? :) – 2014-10-07 20:04:58

+0

這不是我所需要的,這是我現在使用的。我已更新我的示例以顯示她想看到的內容。 – user3154922 2014-10-07 20:08:34