2015-03-30 24 views
2

我想要测试用户界面的一个特定元素。要做到这一点,我需要特别请求我的后端来回应预定义的数据,但所有其他请求应该通过。下面是我如何做到这一点(咖啡更多可读性):当我模拟后端查看不加载

describe 'select2 combobox widget',()-> 
    httpBackendMock =() -> 
    angular.module 'httpBackendMock', ['ngMockE2E', 'fmAppApp'] 
     .run ($httpBackend)-> 
      dummyCategories = [ 
       {id: 1, name: 'foo', icon: '', user_id: 5}, 
       {id: 2, name: 'bar', icon: '', user_id: 5}, 
       {id: 3, name: 'baz', icon: '', user_id: 5}, 
       {id: 4, name: 'quax', icon: '', user_id: 5} 
      ] 

      $httpBackend.whenGET '/api/categories' 
       .respond()-> 
        [200, dummyCategories] 
      $httpBackend.whenGET /.*/ 
       .passThrough() 
      $httpBackend.whenGET /^\/views\// 
       .passThrough() 
      $httpBackend.whenGET /^\/scripts\/.*/ 
       .passThrough() 
      $httpBackend.whenGET /^\/scripts\// 
       .passThrough() 
      $httpBackend.whenGET /^\/bower_components\// 
       .passThrough() 
      $httpBackend.whenGET(/\.html$/).passThrough() 

    browser 
    .addMockModule 'httpBackendMock', httpBackendMock 

所以基本上我在这里做的是我的应用模块fmAppApp和角度ngMockE2E顶部创建新的模块,并告诉量角器它。

并为完整起见,我会在这里展示一个简单的声明本describe块中:

it 'should allow user to type in anything',()-> 
    browser.get 'http://localhost:9000/#/' 
    element By.model 'category.selected' 
     .click() 
    input = element By.css '.ui-select-search' 
    input.sendKeys 'newtestcategory' 
    expect input.getAttribute('value') 
     .toBe 'newtestcategory' 

当我运行咕噜量角器它会打开浏览器,导航到指定的URL(http://localhost:9000/#/),因为它应该和然后我看到这个错误的空白页和规格失败: NoSuchElementError: No element found using locator: by.model("category.selected")

不幸的是,这个消息是我所有,因为我无法打开萤火虫,并看到明显的原因出了什么问题。我想我可以以某种方式从浏览器控制台重定向日志记录,看看什么是邪恶根源,但我不知道如何。也许有人遇到过,并知道它可能是什么? 更新: 我一样Cétia以下建议和我在日志中这样的信息:

message: 'http://localhost:9000/bower_components/angular/angular.js 11607:24 Error: Unexpected request: POST /api/login

现在这是为什么?我应该添加“API /登录”passThrough()?

+0

这是否有帮助? http://stackoverflow.com/questions/24946840/protractor-tests-inconsistently-passing-failing-for-angularjs-app – DTing 2015-04-02 09:06:25

回答

1

看来我没有提供足够的信息。我遗漏了一些我认为无意无意压倒你的代码,但事实证明这是一个绊脚石。

browser.get 'http://localhost:9000/#/' 
element By.model 'email' 
    .sendKeys '[email protected]' 
element By.model 'password' 
    .sendKeys '123456' 
element By.cssContainingText 'form[name=login] button', 'Войти' 
    .click() 

此代码负责登录用户,我需要在这里,因为未经授权的用户不允许看到我想测试的视图。 我以为我确定所有请求通过,但我当然忘记了我的登录请求是POST请求。所以问题只是通过添加

$httpBackend.whenPOST /.*/ 
     .passThrough() 
2

为确保您的模拟加载,你可以添加console.log内,并在你的量角器测试地址:

browser.manage().logs().get('browser').then(function(browserLog) { 
    console.log('log: ' + require('util').inspect(browserLog)); 
}); 

为了在你的量角器控制台输出浏览器日志(您browser.get后)。

+1

这是一个真正的答案或评论/提示如何诊断问题? – 2015-04-04 18:58:02

+1

虽然这不是对我的问题的直接回答,但没有它我就无法得到真相,所以谢谢。 – dKab 2015-04-06 17:58:09