AngularJS茉莉花工厂测试与间谍

AngularJS茉莉花工厂测试与间谍,angularjs,jasmine,Angularjs,Jasmine,我有一个帐户和用户工厂。现在我想测试帐户工厂 在测试中,我想检查是否调用了new User(),是否返回了假数据 angular.module('app') .factory 'Account', [ 'User', (User) -> class @Account constructor: (account) -> @self = this @user = new User(account.user_id) ] .factory 'User'

我有一个帐户和用户工厂。现在我想测试帐户工厂

在测试中,我想检查是否调用了new User(),是否返回了假数据

angular.module('app')

.factory 'Account', [ 'User', (User) ->
  class @Account
    constructor: (account) ->
      @self = this
      @user = new User(account.user_id)
]

.factory 'User', [ '$http', ($http) ->
  class @User
    constructor: (id)
      $http.get('/user.json?id='+id)
      .success (data) =>
        //do something
      .error (data) ->
        //do something
]
测试:

我总是: 错误:User()方法不存在

这里有一个

当我删除spy时,测试为绿色,并调用console.log。 当我添加spyOn时,我得到了错误


如何进行测试以检查是否调用了新用户?

模拟角度服务的方法(在JS中,我不说CS):


如果
用户
jasmine.createSpy
模仿,那么下面的小提琴演示了一个成功的测试:

你让jasmine监视
窗口
对象的
用户
方法:
间谍(窗口,'User')
。我不知道其他方法来监视新用户,但是Windows不知道用户。当您创建
帐户时,您需要发送一个模拟
用户
。抱歉,我不知道如何执行此操作您必须使用
$provide
来创建工厂。Thx,但我如何检查用户是否被调用?这取决于您计划如何模拟它。Thx为小提琴。我还有一个问题。如何调用此间谍上的.callFake,此间谍由createSpy创建。
describe 'app', ->
  describe 'Account', ->
    Account   = undefined
    User      = undefined

    beforeEach(module('app'))

    beforeEach inject((_Account_, _User_) ->
      Account = _Account_
      User    = _User_
    )

    describe 'initialize', ->
      it 'should call new User', ->
        spyOn(window, 'User').and.callFake( (value) ->
          return value
        )
        account = new Account({ id: 1 })
describe('app', function() {
    describe('Account', function() {

        var Account, User;

        // This is always first
        beforeEach(module('app'));

        // This ***HAS*** to go before the beforeEach(inject(...)) block
        beforeEach(function() {
            User = ...; // mock it as necessary, e.g. jasmine.createSpy('UserMock')

            module(function($provide) {
                $provide.value('User', User);
            });
        });

        beforeEach(inject(function(_Account_) {
            Account = _Account_;
        }));

        // Now the User is mocked
        ...
    });
});