2015-03-13 19 views
1

我試圖用「量角器-http-mock」來模擬http響應。無法使量角器-http-mock工作,拋出錯誤「模塊'httpMock'不可用!」

這是我在我的測試

var mock = require('protractor-http-mock'); 
beforeEach(function() { 
     mock([{ 
      request: { 
       path: 'api/account/activate', 
       method: 'PUT', 
       //status: 204 
      }, 
      response: { 
       //data: {}, 
       status: 204 
      } 
     }]); 
    }); 

expect(mock.requestsMade()).toEqual([ 
     { url : '/api/account/activate', method : 'PUT' } 
    ]); 

當我運行我的測試中,它說用這個 - 不明錯誤:JavaScript錯誤:[$注射器:NOMOD]模塊「httpMock」不可!您拼錯了模塊名稱或忘記加載模塊名稱。如果註冊模塊確保您指定依賴關係作爲第二個參數。

此外,當我刪除期望的部分,它不抱怨任何事情,但不嘲笑任何事情。

有更多知識的人可以幫助嗎?我不想使用 - ngMockE2E,有沒有第三種方法呢?

+0

嘗試添加'要求()'在你的量角器配置( '量角器-HTTP-模擬')''來onPrepare。 – alecxe 2015-03-13 14:42:16

+0

我在conf.js上做了同樣的事情 - onPrepare:function(){ require('protractor-http-mock'); },但仍然沒有運氣。 – hny2015 2015-03-13 15:13:52

+0

你可以嘗試重新安裝'量角器-http-mock'嗎?此外,你正在使用哪個「量角器」版本?謝謝。 – alecxe 2015-03-13 15:16:37

回答

1

mock()尚未被調用時,我能夠重現問題,但mock.teardown()是。在你的情況,你應該把tearDown()afterEach()

beforeEach(function() { 
    mock([{ 
     request: { 
      path: 'api/account/activate', 
      method: 'PUT', 
     }, 
     response: { 
      //data: {}, 
      status: 204 
     } 
    }]); 

    browser.ignoreSynchronization = true; 
    browser.get('/'); 
    // wait before we get past loading stage, this together with ignoreSynchronization seems be a valid workaround for manually //boostrapping Angular when running Protractor 
    browser.driver.wait(function() { 
     return browser.driver.getCurrentUrl().then(function (url) { 
      return /\/\w+-\w+\//.test(url); 
     }); 
    }); 
}); 

afterEach(function() { 
    mock.teardown(); 
}); 

此外,要注意以下幾點,可以幫助在這裏:

  • 您量角器的配置應該有mocks定義:

    mocks: { 
        dir: "mocks", // path to directory with mocks 
        default: [] 
    }, 
    
  • onPrepare()的量角器配置中,設置爲.config

    require("protractor-http-mock").config = { 
        rootDirectory: __dirname, 
        protractorConfig: "protractor.conf.js" // name of the config here 
    }; 
    
+0

做的和上面提到的完全一樣,但是有一些問題? 1.爲什麼在每個功能之後?我不是在每個函數中調用模擬,只有1個函數需要模擬。 2.爲什麼要單獨定義模擬?我從spec文件中調用它,我真的需要將它分開,因爲我沒有創建任何模擬文件。我在這些步驟後重新安裝了應用程序,但仍然無法使用http-mock。這裏是我的Conf文件 - https://gist.github.com/vineet-mrgreen/4831394d2035117fad19 – hny2015 2015-03-16 10:28:37

+0

我很笨,我知道爲什麼每個函數之後。我沒有看到每個..前我的更新文件中沒有使用模擬在每個之前,因爲我需要它只有1功能 – hny2015 2015-03-16 13:29:31

+0

@ hny2015抱歉,我剛剛列出了我已設置的一切,它是爲我工作.. – alecxe 2015-03-16 13:32:47

相關問題