1

VS での javascript 単体テスト / bdd について読んだ後、次の組み合わせを使用できることがわかりました。

- ReSharper - support for PhantomJS headless + Jasmine/QUnit
- Testr - mock Require dependencies

テスト スクリプトで Jasmine を使用したところ、同じファイルで宣言された関数を使用して、いくつかの簡単なテストを正常に実行できました。

ただし、依存関係のある js モジュールをテストするための実際のエンド ツー エンドの例を見つけたりビルドしたりすることができませんでした。John Papa による SPA Jumpstart の例で使用されている例に基づいて構築しようとしています。

したがって、datacontext.js に依存する people.js ビューモデル モジュールがあるとします。

define(['services/datacontext'],
 function (datacontext) {
var peopleViewModel = {        
                       title: 'People page'
                      };
return peopleViewModel;
})

フォルダ構造:

/App/Viewmodels : people.js
/App/Services : datacontext.js
/App/Tests : peopletests.js

このテストを実行するには、peopletests.js に何を追加する必要がありますか?

describe("My Tests Set", function () {
 it("People Title Test", function () {
   expect(peopleViewModel.title()).toEqual("People page");
 });
});
4

1 に答える 1

1

これを試して:

  1. 参照パスとしてrequire.jsを追加
  2. 参照パスとしてrequire.configスクリプトを追加
  3. require モジュールをロードします。

peopletests.js:

/// <reference path="~/Scripts/require.js"/>
/// <reference path="~/App/requireConfig.js"/>

describe("My Tests Set", function () {
var people;

beforeEach(function () {
    if (!people) { //if people is undefined it will try to load it
       require(["people"], function (peopleViewModel) {
            people = peopleViewModel;
        });
        //waits for people to be defined (loaded)
        waitsFor(function () { 
            return people;
        }, "loading external module", 1000);
    }
});

 it("People Title Test", function () {
   expect(people.title).toEqual("People page");
 });
});

requireConfig.js:

//beware of the port, if your app is runing in port 8080 
//you need to specified that to require since resharper whould use a random port 
//when running tests 
require.config({
    baseUrl: 'http://localhost:8080/App/',
    paths: {
        people: 'ViewModels/people',
        dataContext: 'Services/datacontext'
    }
});

people.js

define(['dataContext'],
 function (datacontext) {
var peopleViewModel = {        
                       title: 'People page'
                      };
return peopleViewModel;
})
于 2014-01-16T02:28:14.753 に答える