0

Mocha と Chai を使用して、Ember (v1.0.0-rc.3) アプリケーションのコントローラーのテスト ケースを作成しようとしています。私のコントローラーの1つは、次のように別のコントローラーを使用しています

App.ABCController = Em.ObjectController.extend({
  needs: ['application'],

  welcomeMSG: function () {
    return 'Hi, ' + this.get('controllers.application.name');
  }.property(),
  ...
  });

私は以下のようにtestCaseを書きました:

  describe 'ABCController', ->
  expect = chai.expect
  App = require '../support/setup'
  abcController = null

  before ->
    App.reset()
    ApplicationController = require 'controllers/application_controller'
    ABCController = require 'controllers/abc_controller'
    applicationController = ApplicationController.create()
    abcController = ABCController.create()

  describe '#welcomeMSG', ->
    it 'should return Hi, \'user\'.', ->
      msg = abcController.get('welcomeMSG')
      expect(msg).to.be.equal('Hi, '+ applicationController.get('name'))

support/setup file is as follows
Em.testing = true
App = null
Em.run ->
  App = Em.Application.create()
module.exports = App

テストケースを実行しようとすると、エラーが発生します

    "Before all" hook:
TypeError: Cannot call method 'has' of null
    at verifyDependencies (http://localhost:3333/test/scripts/ember.js:27124:20)
    at Ember.ControllerMixin.reopen.init (http://localhost:3333/test/scripts/ember.js:27141:9)
    at superWrapper [as init] (http://localhost:3333/test/scripts/ember.js:1044:16)
    at new Class (http://localhost:3333/test/scripts/ember.js:10632:15)
    at Function.Mixin.create.create (http://localhost:3333/test/scripts/ember.js:10930:12)
    at Function.Ember.ObjectProxy.reopenClass.create (http://localhost:3333/test/scripts/ember.js:11756:24)
    at Function.superWrapper (http://localhost:3333/test/scripts/ember.js:1044:16)
    at Context.eval (test/controllers/abc_controller_test.coffee:14:47)
    at Hook.Runnable.run (test/vendor/scripts/mocha-1.8.2.js:4048:32)
    at next (test/vendor/scripts/mocha-1.8.2.js:4298:10)

この問題を解決するのを手伝ってください。mocha と chai を使用した最新の ember.js アプリケーションのテストについて学習できるリンクを誰かが提供してくれれば幸いです。

4

1 に答える 1

0

ドキュメントを読んで、あなたの問題は、expectこれが原因で失敗することだと思いますto.be.equal。アサーション チェーンを次のように変更してみてください。

expect(msg).to.equal('Hi, '+ applicationController.get('name'))

アップデート

あなたのコメントを読んだ後、私はあなたの場合の問題は、あなたが行う場合はEmber.testing = truebefore needed と同等であるApp.deferReadiness()ため、アプリを使用する前にアプリを「初期化」する必要があることだと思います。これはApp.initialize()グローバルbeforeフック内で行われます。そして最後に、フックのApp.reset()内部で呼び出します。beforeEach

この変更を導入した更新の詳細については、このブログ投稿も確認してください。

それが役に立てば幸い

于 2013-05-17T17:48:50.667 に答える