【问题标题】:Mocking Restangular with angularjs jasmine karma用 angularjs jasmine karma 模拟 Restangular
【发布时间】:2013-12-20 19:12:54
【问题描述】:

我想对我的客户端模型/资源进行单元测试。

我使用restangular 并想模拟它并检查/监视是否正确调用了restangular

我的资源:

module = angular.module 'myapp.core.resources'

class Messaging
  constructor: (@restangular) ->
    @resource = @restangular.all('messaging')

  send_to: (user, message) =>
    @resource.post(to: user.id, message: message)

module.service '$messaging', ['Restangular', Messaging]

我的模拟:

# Globally available
@restangularMock =
  one: jasmine.createSpy()
  all: (resource) ->
    post: jasmine.createSpy('post'),
    get: jasmine.createSpy('get')

我的测试:

# Set the global config before end of configuration lifecycle
angular.module('myapp.core.config').config (GlobalConfig) ->
  GlobalConfig.setBaseConfig
    api:
      baseUri: '/api',
      csrfTokens: {'messaging': 'abcdef'}

describe "Resources", ->
  beforeEach module ($provide)->
    $provide.value('Restangular', self.restangularMock)

  beforeEach module("myapp.core.resources")

  describe "#Messaging", ->
    messaging = null

    beforeEach inject ($messaging) ->
      messaging = $messaging

    it "sends a message to the given user id", ->
      messaging.send_to('test', 'message!')

      expect(self.restangularMock.all('messaging').post).toHaveBeenCalledWith(to: 'test', message: 'message!')

我得到的错误:

Error: [ng:areq] Argument 'fn' is not a function, got Object

看起来失败来自于加载restangular 模块,它在该模块中获取了restangular 提供程序对象(即this.$get = -> ...)并尝试运行invoke()

【问题讨论】:

    标签: angularjs mocking jasmine karma-runner restangular


    【解决方案1】:

    代码:

    beforeEach module ($provide)->
        $provide.value('Restangular', self.restangularMock)
    

    被coffeescript转换成

    beforeEach(module(function($provide) {
      return $provide.value('Restangular', self.restangularMock);
    }));
    

    并且'module'中的回调函数应该返回undefined

    因此,将代码更改为:

    beforeEach module ($provide)->
        $provide.value('Restangular', self.restangularMock)
        return
    

    Converting angular-seed jasmine unit tests to coffeescript

    【讨论】:

    • 啊,Coffeescript 你可能是个狡猾的人 - 为我工作 - 谢谢!
    • 如何模拟 restangular put 方法,因为 put 是在单个消息对象 (message.put()) 上调用的?
    猜你喜欢
    • 1970-01-01
    • 2017-09-04
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    相关资源
    最近更新 更多